Built with Alectryon, running Coq+SerAPI v8.16.0+0.16.0. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+βCtrl+β to navigate, Ctrl+π±οΈ to focus. On Mac, use β instead of Ctrl.
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο
F Sfix = Sfix
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο
MonotonicFunction F
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο HFmono: MonotonicFunction F
F Sfix = Sfix
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο
MonotonicFunction F
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο
MonotonicFunction (Fassoc Ο Ο^{svar:0β¦X} X)
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο
MonotonicFunction
(Ξ»S : propset M,
eval (update_svar_val X S Ο) Ο^{svar:0β¦X})
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο
well_formed_positive (mu , Ο)
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο
svar_is_fresh_in X Ο
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο
svar_is_fresh_in X Ο
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο
svar_is_fresh_in (fresh_svar Ο) Ο
apply set_svar_fresh_is_fresh.
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο HFmono: MonotonicFunction F
F Sfix = Sfix
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο HFmono: MonotonicFunction F
isFixpoint F (LeastFixpointOf F)
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο HFmono: MonotonicFunction F Ffix: isFixpoint F (LeastFixpointOf F)
F Sfix = Sfix
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο HFmono: MonotonicFunction F
isFixpoint F (LeastFixpointOf F)
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο HFmono: MonotonicFunction F
MonotonicFunction F
apply HFmono.
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο HFmono: MonotonicFunction F Ffix: isFixpoint F (LeastFixpointOf F)
F Sfix = Sfix
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο HFmono: MonotonicFunction F Ffix: F (LeastFixpointOf F) = LeastFixpointOf F
F Sfix = Sfix
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο HFmono: MonotonicFunction F Ffix: F (LeastFixpointOf F) = LeastFixpointOf F HeqSfix: Sfix =
(letX := fresh_svar Ο in
LeastFixpointOf
(Ξ»S : propset M,
letΟ' := update_svar_val X S Ο ineval Ο' Ο^{svar:0β¦X}))
F Sfix = Sfix
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο HFmono: MonotonicFunction F Ffix: F (LeastFixpointOf F) = LeastFixpointOf F HeqSfix: Sfix =
LeastFixpointOf
(Ξ»S : propset M,
eval
(update_svar_val (fresh_svar Ο) S Ο)
Ο^{svar:0β¦fresh_svar Ο})
F Sfix = Sfix
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F =
(Ξ»S : propset M,
eval (update_svar_val X S Ο) Ο^{svar:0β¦X}) Sfix: propset M OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο HFmono: MonotonicFunction F Ffix: F (LeastFixpointOf F) = LeastFixpointOf F HeqSfix: Sfix =
LeastFixpointOf
(Ξ»S : propset M,
eval
(update_svar_val (fresh_svar Ο) S Ο)
Ο^{svar:0β¦fresh_svar Ο})
F Sfix = Sfix
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern X: svar HeqX: X = fresh_svar Ο F: propset M β propset M Sfix: propset M OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο HFmono: MonotonicFunction F Ffix: F (LeastFixpointOf F) = LeastFixpointOf F HeqSfix: Sfix =
LeastFixpointOf
(Ξ»S : propset M,
eval
(update_svar_val (fresh_svar Ο) S Ο)
Ο^{svar:0β¦fresh_svar Ο}) HeqF: F =
(Ξ»S : propset M,
eval (update_svar_val (fresh_svar Ο) S Ο)
Ο^{svar:0β¦fresh_svar Ο})
F Sfix = Sfix
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern X: svar HeqX: X = fresh_svar Ο F: propset M β propset M Sfix: propset M OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο HFmono: MonotonicFunction F Ffix: F (LeastFixpointOf F) = LeastFixpointOf F HeqF: F =
(Ξ»S : propset M,
eval (update_svar_val (fresh_svar Ο) S Ο)
Ο^{svar:0β¦fresh_svar Ο}) HeqSfix: Sfix = LeastFixpointOf F
F Sfix = Sfix
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern X: svar HeqX: X = fresh_svar Ο F: propset M β propset M Sfix: propset M OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο HFmono: MonotonicFunction F HeqF: F =
(Ξ»S : propset M,
eval (update_svar_val (fresh_svar Ο) S Ο)
Ο^{svar:0β¦fresh_svar Ο}) HeqSfix: Sfix = LeastFixpointOf F Ffix: F Sfix = Sfix
F Sfix = Sfix
apply Ffix.Qed.
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M
well_formed_positive (mu , Ο)
β letX := fresh_svar Ο inletF := Fassoc Ο Ο^{svar:0β¦X} X inletSfix := eval Ο (mu , Ο) in F S β S β Sfix β S
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M
well_formed_positive (mu , Ο)
β letX := fresh_svar Ο inletF := Fassoc Ο Ο^{svar:0β¦X} X inletSfix := eval Ο (mu , Ο) in F S β S β Sfix β S
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M
no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο
β Fassoc Ο Ο^{svar:0β¦fresh_svar Ο} (fresh_svar Ο) S
β S β eval Ο (mu , Ο) β S
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M X: svar HeqX: X = fresh_svar Ο
no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο
β Fassoc Ο Ο^{svar:0β¦X} X S β S β eval Ο (mu , Ο) β S
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X
no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο β F S β S β eval Ο (mu , Ο) β S
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο)
no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο β F S β S β Sfix β S
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M)
no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο β F S β S β Sfix β S
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M)
no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο β F S β S β Sfix β S
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο
F S β S β Sfix β S
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο
MonotonicFunction F
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο HFmono: MonotonicFunction F
F S β S β Sfix β S
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο
MonotonicFunction F
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο
MonotonicFunction (Fassoc Ο Ο^{svar:0β¦X} X)
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο
MonotonicFunction
(Ξ»S : propset M,
eval (update_svar_val X S Ο) Ο^{svar:0β¦X})
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο
well_formed_positive (mu , Ο)
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο
svar_is_fresh_in X Ο
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο
svar_is_fresh_in X Ο
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο
svar_is_fresh_in (fresh_svar Ο) Ο
apply set_svar_fresh_is_fresh.
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο HFmono: MonotonicFunction F
F S β S β Sfix β S
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο HFmono: MonotonicFunction F
LeastFixpointOf F = Sfix
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο HFmono: MonotonicFunction F Hlfp: LeastFixpointOf F = Sfix
F S β S β Sfix β S
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο HFmono: MonotonicFunction F
LeastFixpointOf F = Sfix
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο HFmono: MonotonicFunction
(Fassoc Ο Ο^{svar:0β¦fresh_svar Ο}
(fresh_svar Ο))
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο HFmono: MonotonicFunction
(Fassoc Ο Ο^{svar:0β¦fresh_svar Ο}
(fresh_svar Ο))
LeastFixpointOf
(Ξ»S : propset M,
eval (update_svar_val (fresh_svar Ο) S Ο)
Ο^{svar:0β¦fresh_svar Ο}) =
LeastFixpointOf
(Ξ»S : propset M,
eval (update_svar_val (fresh_svar Ο) S Ο)
Ο^{svar:0β¦fresh_svar Ο})
reflexivity.
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο HFmono: MonotonicFunction F Hlfp: LeastFixpointOf F = Sfix
F S β S β Sfix β S
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο HFmono: MonotonicFunction F Hlfp: LeastFixpointOf F = Sfix Hincl: F S β S
Sfix β S
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο HFmono: MonotonicFunction F Hlfp: LeastFixpointOf F = Sfix Hincl: F S β S Hleast: leq (F S) S β leq (LeastFixpointOf F) S
Sfix β S
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο HFmono: MonotonicFunction F Hlfp: LeastFixpointOf F = Sfix Hincl: F S β S Hleast: F S β S β LeastFixpointOf F β S
Sfix β S
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο HFmono: MonotonicFunction F Hlfp: LeastFixpointOf F = Sfix Hincl: F S β S Hleast: LeastFixpointOf F β S
Sfix β S
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern S: propset M X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix: propset M HeqSfix: Sfix = eval Ο (mu , Ο) OS:= PropsetOrderedSet M: OrderedSet (propset M) L:= PowersetLattice M: CompleteLattice (propset M) Hwfp: no_negative_occurrence_db_b 0 Ο &&
well_formed_positive Ο HFmono: MonotonicFunction F Hlfp: LeastFixpointOf F = Sfix Hincl: F S β S Hleast: Sfix β S
Sfix β S
apply Hleast.Qed.
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M
well_formed_positive (mu , Ο)
β letX := fresh_svar Ο inletF := Fassoc Ο Ο^{svar:0β¦X} X in
F Sfix β Sfix
β (βS : propset M, F S β S β Sfix β S)
β Sfix = eval Ο (mu , Ο)
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M
well_formed_positive (mu , Ο)
β letX := fresh_svar Ο inletF := Fassoc Ο Ο^{svar:0β¦X} X in
F Sfix β Sfix
β (βS : propset M, F S β S β Sfix β S)
β Sfix = eval Ο (mu , Ο)
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , Ο)
letX := fresh_svar Ο inletF := Fassoc Ο Ο^{svar:0β¦X} X in
F Sfix β Sfix
β (βS : propset M, F S β S β Sfix β S)
β Sfix = eval Ο (mu , Ο)
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , Ο)
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , Ο) X: svar HeqX: X = fresh_svar Ο
Fassoc Ο Ο^{svar:0β¦X} X Sfix β Sfix
β (βS : propset M,
Fassoc Ο Ο^{svar:0β¦X} X S β S β Sfix β S)
β Sfix = eval Ο (mu , Ο)
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , Ο) X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X
F Sfix β Sfix
β (βS : propset M, F S β S β Sfix β S)
β Sfix = eval Ο (mu , Ο)
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , Ο) X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Hprefix: F Sfix β Sfix Hleast: βS : propset M, F S β S β Sfix β S
Sfix = eval Ο (mu , Ο)
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , Ο) X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Hprefix: F Sfix β Sfix Hleast: βS : propset M, F S β S β Sfix β S
Sfix =
(letX := fresh_svar Ο in
LeastFixpointOf
(Ξ»S : propset M,
letΟ' := update_svar_val X S Ο ineval Ο' Ο^{svar:0β¦X}))
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , Ο) X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Hprefix: F Sfix β Sfix Hleast: βS : propset M, F S β S β Sfix β S
Sfix =
LeastFixpointOf
(Ξ»S : propset M,
eval (update_svar_val (fresh_svar Ο) S Ο)
Ο^{svar:0β¦fresh_svar Ο})
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , Ο) X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F =
(Ξ»S : propset M,
eval (update_svar_val X S Ο) Ο^{svar:0β¦X}) Hprefix: F Sfix β Sfix Hleast: βS : propset M, F S β S β Sfix β S
Sfix =
LeastFixpointOf
(Ξ»S : propset M,
eval (update_svar_val (fresh_svar Ο) S Ο)
Ο^{svar:0β¦fresh_svar Ο})
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , Ο) X: svar HeqX: X = fresh_svar Ο F: propset M β propset M Hprefix: F Sfix β Sfix Hleast: βS : propset M, F S β S β Sfix β S HeqF: F =
(Ξ»S : propset M,
eval (update_svar_val (fresh_svar Ο) S Ο)
Ο^{svar:0β¦fresh_svar Ο})
Sfix =
LeastFixpointOf
(Ξ»S : propset M,
eval (update_svar_val (fresh_svar Ο) S Ο)
Ο^{svar:0β¦fresh_svar Ο})
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , Ο) X: svar HeqX: X = fresh_svar Ο F: propset M β propset M Hprefix: F Sfix β Sfix Hleast: βS : propset M, F S β S β Sfix β S HeqF: F =
(Ξ»S : propset M,
eval (update_svar_val (fresh_svar Ο) S Ο)
Ο^{svar:0β¦fresh_svar Ο})
Sfix = LeastFixpointOf F
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , Ο) X: svar HeqX: X = fresh_svar Ο F: propset M β propset M Hprefix: F Sfix β Sfix Hleast: βS : propset M, F S β S β Sfix β S HeqF: F =
(Ξ»S : propset M,
eval (update_svar_val (fresh_svar Ο) S Ο)
Ο^{svar:0β¦fresh_svar Ο})
leq (F Sfix) Sfix
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , Ο) X: svar HeqX: X = fresh_svar Ο F: propset M β propset M Hprefix: F Sfix β Sfix Hleast: βS : propset M, F S β S β Sfix β S HeqF: F =
(Ξ»S : propset M,
eval (update_svar_val (fresh_svar Ο) S Ο)
Ο^{svar:0β¦fresh_svar Ο})
βx : propset M, leq (F x) x β leq Sfix x
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , Ο) X: svar HeqX: X = fresh_svar Ο F: propset M β propset M Hprefix: F Sfix β Sfix Hleast: βS : propset M, F S β S β Sfix β S HeqF: F =
(Ξ»S : propset M,
eval (update_svar_val (fresh_svar Ο) S Ο)
Ο^{svar:0β¦fresh_svar Ο})
leq (F Sfix) Sfix
apply Hprefix.
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , Ο) X: svar HeqX: X = fresh_svar Ο F: propset M β propset M Hprefix: F Sfix β Sfix Hleast: βS : propset M, F S β S β Sfix β S HeqF: F =
(Ξ»S : propset M,
eval (update_svar_val (fresh_svar Ο) S Ο)
Ο^{svar:0β¦fresh_svar Ο})
βx : propset M, leq (F x) x β leq Sfix x
apply Hleast.Qed.
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M
well_formed_positive (mu , Ο)
β letX := fresh_svar Ο inletF := Fassoc Ο Ο^{svar:0β¦X} X in
F Sfix β Sfix
β§ (βS : propset M, F S β S β Sfix β S)
β Sfix = eval Ο (mu , Ο)
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M
well_formed_positive (mu , Ο)
β letX := fresh_svar Ο inletF := Fassoc Ο Ο^{svar:0β¦X} X in
F Sfix β Sfix
β§ (βS : propset M, F S β S β Sfix β S)
β Sfix = eval Ο (mu , Ο)
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , Ο)
letX := fresh_svar Ο inletF := Fassoc Ο Ο^{svar:0β¦X} X in
F Sfix β Sfix β§ (βS : propset M, F S β S β Sfix β S)
β Sfix = eval Ο (mu , Ο)
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , Ο)
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , Ο) X: svar HeqX: X = fresh_svar Ο
Fassoc Ο Ο^{svar:0β¦X} X Sfix β Sfix
β§ (βS : propset M,
Fassoc Ο Ο^{svar:0β¦X} X S β S β Sfix β S)
β Sfix = eval Ο (mu , Ο)
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , Ο) X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X
F Sfix β Sfix β§ (βS : propset M, F S β S β Sfix β S)
β Sfix = eval Ο (mu , Ο)
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , Ο) X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix': propset M HeqSfix': Sfix' = eval Ο (mu , Ο)
F Sfix β Sfix β§ (βS : propset M, F S β S β Sfix β S)
β Sfix = Sfix'
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , Ο) X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix': propset M HeqSfix': Sfix' = eval Ο (mu , Ο)
F Sfix β Sfix β§ (βS : propset M, F S β S β Sfix β S)
β Sfix = Sfix'
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , Ο) X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix': propset M HeqSfix': Sfix' = eval Ο (mu , Ο)
Sfix = Sfix'
β F Sfix β Sfix
β§ (βS : propset M, F S β S β Sfix β S)
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , Ο) X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix': propset M HeqSfix': Sfix' = eval Ο (mu , Ο)
F Sfix β Sfix β§ (βS : propset M, F S β S β Sfix β S)
β Sfix = Sfix'
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , Ο) X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix': propset M HeqSfix': Sfix' = eval Ο (mu , Ο) H1: F Sfix β Sfix H2: βS : propset M, F S β S β Sfix β S
Sfix = Sfix'
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , Ο) H2: βS : propset M,
Fassoc Ο Ο^{svar:0β¦fresh_svar Ο}
(fresh_svar Ο) S β S β
Sfix β S H1: Fassoc Ο Ο^{svar:0β¦fresh_svar Ο}
(fresh_svar Ο) Sfix β Sfix
Sfix = eval Ο (mu , Ο)
auto using eval_mu_if_lfp.
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , Ο) X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix': propset M HeqSfix': Sfix' = eval Ο (mu , Ο)
Sfix = Sfix'
β F Sfix β Sfix
β§ (βS : propset M, F S β S β Sfix β S)
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , Ο) X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix': propset M HeqSfix': Sfix' = eval Ο (mu , Ο) H: Sfix = Sfix'
F Sfix β Sfix β§ (βS : propset M, F S β S β Sfix β S)
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , Ο) X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix': propset M HeqSfix': Sfix' = eval Ο (mu , Ο) H: Sfix = Sfix'
F Sfix β Sfix
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , Ο) X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix': propset M HeqSfix': Sfix' = eval Ο (mu , Ο) H: Sfix = Sfix'
βS : propset M, F S β S β Sfix β S
Ξ£: Signature M: Model Ο: Valuation Ο: Pattern Sfix: propset M Hwfp: well_formed_positive (mu , Ο) X: svar HeqX: X = fresh_svar Ο F: propset M β propset M HeqF: F = Fassoc Ο Ο^{svar:0β¦X} X Sfix': propset M HeqSfix': Sfix' = eval Ο (mu , Ο) H: Sfix = Sfix'
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation X: svar Hfr1: X β free_svars base Hfr2: X β free_svars step
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation X: svar Hfr1: X β free_svars base Hfr2: X β free_svars step
eval Ο
(nest_mu base or nest_mu step $ BoundVarSugar.B0)^{svar:0β¦X} =
eval Ο (base or step $ patt_free_svar X)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation X: svar Hfr1: X β free_svars base Hfr2: X β free_svars step
eval Ο
(nest_mu base or nest_mu step $ BoundVarSugar.B0)^[svar:0β¦
patt_free_svar X] =
eval Ο (base or step $ patt_free_svar X)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation X: svar Hfr1: X β free_svars base Hfr2: X β free_svars step
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation X: svar Hfr1: X β free_svars base Hfr2: X β free_svars step
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation X: svar Hfr1: X β free_svars base Hfr2: X β free_svars step
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation X: svar Hfr1: X β free_svars base Hfr2: X β free_svars step
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation X: svar Hfr1: X β free_svars base Hfr2: X β free_svars step
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M A: propset M
eval
(update_svar_val (fresh_svar patt_ind_gen_body) A Ο)
(base
or step $
patt_free_svar (fresh_svar patt_ind_gen_body)) =
eval Ο base βͺ app_ext (eval Ο step) A
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M A: propset M
eval
(update_svar_val (fresh_svar patt_ind_gen_body) A Ο)
base
βͺ eval
(update_svar_val (fresh_svar patt_ind_gen_body) A
Ο)
(step $
patt_free_svar (fresh_svar patt_ind_gen_body)) =
eval Ο base βͺ app_ext (eval Ο step) A
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M A: propset M
eval
(update_svar_val (fresh_svar patt_ind_gen_body) A Ο)
base
βͺ app_ext
(eval
(update_svar_val (fresh_svar patt_ind_gen_body)
A Ο) step)
(eval
(update_svar_val (fresh_svar patt_ind_gen_body)
A Ο)
(patt_free_svar (fresh_svar patt_ind_gen_body))) =
eval Ο base βͺ app_ext (eval Ο step) A
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M A: propset M
eval
(update_svar_val (fresh_svar patt_ind_gen_body) A Ο)
base
βͺ app_ext
(eval
(update_svar_val (fresh_svar patt_ind_gen_body)
A Ο) step)
(svar_valuation
(update_svar_val (fresh_svar patt_ind_gen_body)
A Ο) (fresh_svar patt_ind_gen_body)) =
eval Ο base βͺ app_ext (eval Ο step) A
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M A: propset M
eval
(update_svar_val (fresh_svar patt_ind_gen_body) A Ο)
base
βͺ app_ext
(eval
(update_svar_val (fresh_svar patt_ind_gen_body)
A Ο) step) A =
eval Ο base βͺ app_ext (eval Ο step) A
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M A: propset M
svar_is_fresh_in (fresh_svar patt_ind_gen_body) base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M A: propset M
eval Ο base
βͺ app_ext
(eval
(update_svar_val (fresh_svar patt_ind_gen_body)
A Ο) step) A =
eval Ο base βͺ app_ext (eval Ο step) A
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M A: propset M
svar_is_fresh_in (fresh_svar patt_ind_gen_body) base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M A: propset M
free_svars base β free_svars ?Οβ
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M A: propset M
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M A: propset M
free_svars step β free_svars patt_ind_gen_body
solve_free_svars_inclusion 5.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M A: propset M
eval Ο base βͺ app_ext (eval Ο step) A =
eval Ο base βͺ app_ext (eval Ο step) A
reflexivity.Qed.Definitionis_witnessing_sequence_old (m : Domain M) (l : list (Domain M)) :=
(last l = Some m) /\
(match l with
| [] => False
| mβ::ms => (mβ β @eval Ξ£ M Ο base)
/\ (@Forall _
(Ξ» (x : (Domain M) * (Domain M)),
let (old, new) := x in
new β
app_ext
(@eval Ξ£ M Ο step)
{[ old ]}
)
(zip (mβ::ms) ms)
)
end).Definitionis_witnessing_sequence (m : Domain M) (l : list (Domain M)) :=
(βlst, last l = Some lst /\ lst β @eval Ξ£ M Ο base)
/\
hd_error l = Some m
/\
((@Forall _ (uncurry (Ξ»newold,
new β
app_ext
(@eval Ξ£ M Ο step)
{[old]}
))
(zip l (tail l))
)).(* If we have a witnessing sequence xβ xβ ... xβ xβββ ... xlast and xβ matches `base`, then xβ xβββ is a witnessing sequence, too. *)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m': M
is_witnessing_sequence m l
β l !! n = Some m'
β m' β eval Ο base
β is_witnessing_sequence m' (drop n l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m': M
is_witnessing_sequence m l
β l !! n = Some m'
β m' β eval Ο base
β is_witnessing_sequence m' (drop n l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
is_witnessing_sequence m' (drop n l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
βlst : M,
last (drop n l) = Some lst β§ lst β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
head (drop n l) = Some m'
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (drop n l) (tail (drop n l)))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
βlst : M,
last (drop n l) = Some lst β§ lst β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
last (drop n l) = Some lst β§ lst β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
last (drop n l) = Some lst
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
lst β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
Some lst = Some lst
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
last l = Some lst
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
n < length l
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
lst β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
Some lst = Some lst
reflexivity.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
last l = Some lst
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
n < length l
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
lst β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
last l = Some lst
apply Hlst.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
n < length l
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
lst β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
n < length l
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
is_Some (l !! n)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
is_Some (Some m')
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
Some m' = Some m'
reflexivity.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
lst β eval Ο base
apply Hbase.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
head (drop n l) = Some m'
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (drop n l) (tail (drop n l)))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
head (drop n l) = Some m'
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (drop n l) (tail (drop n l)))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
head (drop n l) = Some m'
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
l !! n = Some m'
apply Hm'.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (drop n l) (tail (drop n l)))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (drop n l) (tail (drop n l)))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (drop n l) (drop n (tail l)))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(drop n (zip l (tail l)))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M n: nat m', lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hm': l !! n = Some m' Hbase': m' β eval Ο base
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l))
apply Hfa.}Qed.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M m': M
is_witnessing_sequence m l
β head (tail l) = Some m'
β is_witnessing_sequence m' (tail l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M m': M
is_witnessing_sequence m l
β head (tail l) = Some m'
β is_witnessing_sequence m' (tail l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M m': M Hw: is_witnessing_sequence m l Hhead: head (tail l) = Some m'
is_witnessing_sequence m' (tail l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M m': M Hw: (βlst : M, last l = Some lst β§ lst β eval Ο base)
β§ head l = Some m
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
is_witnessing_sequence m' (tail l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst β eval Ο base Hw: head l = Some m
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
is_witnessing_sequence m' (tail l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst β eval Ο base Hw: head l = Some m
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
(βlst : M,
last (tail l) = Some lst β§ lst β eval Ο base)
β§ head (tail l) = Some m'
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (tail l) (tail (tail l)))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst β eval Ο base Hw: head l = Some m
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
βlst : M,
last (tail l) = Some lst β§ lst β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst β eval Ο base Hw: head l = Some m
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
head (tail l) = Some m'
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (tail l) (tail (tail l)))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst β eval Ο base Hw: head l = Some m
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
βlst : M,
last (tail l) = Some lst β§ lst β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst β eval Ο base Hw: head l = Some m
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
last (tail l) = Some lst β§ lst β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst β eval Ο base Hw: head l = Some m
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
last (tail l) = Some lst
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst β eval Ο base Hw: head l = Some m
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
lst β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst β eval Ο base Hw: head l = Some m
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
last (tail l) = Some lst
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst β eval Ο base Hw: head l = Some m
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
last l = Some lst
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst β eval Ο base Hw: head l = Some m
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
head (tail l) = Some ?m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst β eval Ο base Hw: head l = Some m
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
last l = Some lst
apply Hlst1.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst β eval Ο base Hw: head l = Some m
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
head (tail l) = Some m'
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (tail l) (tail (tail l)))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst β eval Ο base Hw: head l = Some m
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
head (tail l) = Some m'
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst β eval Ο base Hw: head l = Some m
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (tail l) (tail (tail l)))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst β eval Ο base Hw: head l = Some m
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
head (tail l) = Some m'
apply Hhead.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst β eval Ο base Hw: head l = Some m
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (tail l) (tail (tail l)))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst β eval Ο base Hw: head l = Some m
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(tail (zip l (tail l)))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst β eval Ο base Hw: head l = Some m
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M m', lst: M Hlst1: last l = Some lst Hlst2: lst β eval Ο base Hw1: head l = Some m Hw2: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) Hhead: head (tail l) = Some m'
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l))
apply Hw2.Qed.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M
is_witnessing_sequence m l
β is_witnessing_sequence_old m (reverse l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M
is_witnessing_sequence m l
β is_witnessing_sequence_old m (reverse l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M
uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
is_witnessing_sequence m l
β is_witnessing_sequence_old m (reverse l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M
uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M
βx : M * M,
uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) x =
(let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M xβ, xβ: M
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
is_witnessing_sequence m l
β is_witnessing_sequence_old m (reverse l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
is_witnessing_sequence m l
β is_witnessing_sequence_old m (reverse l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
is_witnessing_sequence_old m (reverse l)
β is_witnessing_sequence m l
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
is_witnessing_sequence m l
β is_witnessing_sequence_old m (reverse l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last l = Some m' Hbase: m' β eval Ο base Hhd: head l = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l))
is_witnessing_sequence_old m (reverse l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last [] = Some m' Hbase: m' β eval Ο base Hhd: head [] = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
is_witnessing_sequence_old m (reverse [])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (x :: l) = Some m' Hbase: m' β eval Ο base Hhd: head (x :: l) = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (x :: l) (tail (x :: l)))
is_witnessing_sequence_old m (reverse (x :: l))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last [] = Some m' Hbase: m' β eval Ο base Hhd: head [] = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
is_witnessing_sequence_old m (reverse [])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last [] = Some m' Hbase: m' β eval Ο base Hhd: None = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
is_witnessing_sequence_old m (reverse [])
inversion Hhd.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (x :: l) = Some m' Hbase: m' β eval Ο base Hhd: head (x :: l) = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (x :: l) (tail (x :: l)))
is_witnessing_sequence_old m (reverse (x :: l))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (x :: l) = Some m' Hbase: m' β eval Ο base Hhd: Some x = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (x :: l) (tail (x :: l)))
is_witnessing_sequence_old m (reverse (x :: l))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (x :: l) = Some m' Hbase: m' β eval Ο base Hhd: Some x = Some m Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (x :: l) (tail (x :: l))) H0: x = m
is_witnessing_sequence_old m (reverse (m :: l))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) Hhd: Some m = Some m
is_witnessing_sequence_old m (reverse (m :: l))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l)))
is_witnessing_sequence_old m (reverse (m :: l))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l)))
last (reverse (m :: l)) = Some m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l)))
match reverse (m :: l) with
| [] => False
| mβ :: ms =>
mβ β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (mβ :: ms) ms)
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l)))
last (reverse (m :: l)) = Some m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l)))
last (reverse l ++ [m]) = Some m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l)))
Some m = Some m
reflexivity.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l)))
match reverse (m :: l) with
| [] => False
| mβ :: ms =>
mβ β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (mβ :: ms) ms)
end
(* reverse (m::l) <> nil *)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) Heq: reverse (m :: l) = []
False
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) d: M l0: list M Heq: reverse (m :: l) = d :: l0
d β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: l0) l0)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) Heq: reverse (m :: l) = []
False
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) Heq: reverse (m :: l) = []
length (reverse (m :: l)) = length []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) Heq: reverse (m :: l) = [] H: length (reverse (m :: l)) = length []
False
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) Heq: reverse (m :: l) = []
length (reverse (m :: l)) = length []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) Heq: reverse (m :: l) = []
length [] = length []
reflexivity.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) Heq: reverse (m :: l) = [] H: length (reverse (m :: l)) = length []
False
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) Heq: reverse (m :: l) = [] H: length (m :: l) = length []
False
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) Heq: reverse (m :: l) = [] H: S (length l) = 0
False
inversion H.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) d: M l0: list M Heq: reverse (m :: l) = d :: l0
d β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: l0) l0)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) d: M l0: list M Heq: reverse (m :: l) = d :: l0
m' = d
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) d: M l0: list M Heq: reverse (m :: l) = d :: l0 Hm'd: m' = d
d β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: l0) l0)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) d: M l0: list M Heq: reverse (m :: l) = d :: l0
m' = d
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) d: M l0: list M Heq: reverse l ++ [m] = d :: l0
m' = d
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) d: M l0: list M Heq: reverse l ++ [m] = d :: l0 H: last (m :: l) = head (reverse l ++ [m])
m' = d
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) d: M l0: list M Heq: reverse l ++ [m] = d :: l0 H: Some m' = head (reverse l ++ [m])
m' = d
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) d: M l0: list M Heq: rev_append l [] ++ [m] = d :: l0 H: Some m' = head (reverse l ++ [m])
m' = d
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) d: M l0: list M Heq: rev_append l [] ++ [m] = d :: l0 H: Some m' = head (d :: l0)
m' = d
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) d: M l0: list M Heq: rev_append l [] ++ [m] = d :: l0 H: Some m' = Some d
m' = d
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) d: M l0: list M Heq: rev_append l [] ++ [m] = d :: l0 H: Some m' = Some d H1: m' = d
d = d
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) d: M Hbase: d β eval Ο base Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: rev_append l [] ++ [m] = d :: l0 H: Some d = Some d
d = d
reflexivity.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) m': M Hlast: last (m :: l) = Some m' Hbase: m' β eval Ο base Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) d: M l0: list M Heq: reverse (m :: l) = d :: l0 Hm'd: m' = d
d β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: l0) l0)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) d: M Hbase: d β eval Ο base Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0
d β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: l0) l0)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) d: M Hbase: d β eval Ο base Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0
d β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) d: M Hbase: d β eval Ο base Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: l0) l0)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) d: M Hbase: d β eval Ο base Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0
d β eval Ο base
apply Hbase.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) d: M Hbase: d β eval Ο base Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: l0) l0)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) d: M Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: l0) l0)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) d: M Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0 Heq': reverse (reverse (m :: l)) = reverse (d :: l0)
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: l0) l0)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) d: M Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0 Heq': m :: l = reverse (d :: l0)
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: l0) l0)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) d: M Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0 Heq': m :: l = reverse (d :: l0)
l0 = tail (d :: l0)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) d: M Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0 Heq': m :: l = reverse (d :: l0) Heq'': l0 = tail (d :: l0)
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: l0) l0)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) d: M Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0 Heq': m :: l = reverse (d :: l0)
l0 = tail (d :: l0)
reflexivity.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) d: M Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0 Heq': m :: l = reverse (d :: l0) Heq'': l0 = tail (d :: l0)
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: l0) l0)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) d: M Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0 Heq': m :: l = reverse (d :: l0) Heq'': l0 = tail (d :: l0)
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: l0) (tail (d :: l0)))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) d: M Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0 Heq': m :: l = reverse (d :: l0)
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: l0) (tail (d :: l0)))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) d: M Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) l0: list M Heq: reverse (m :: l) = d :: l0 Heq': m :: l = reverse (d :: l0)
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (reverse (m :: l)) (tail (reverse (m :: l))))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) d: M Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l)))
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (reverse (m :: l)) (tail (reverse (m :: l))))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) d: M Hlast: last (m :: l) = Some d Hfa: Forall
(uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})))
(zip (reverse (m :: l))
(tail (reverse (m :: l))))
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (reverse (m :: l)) (tail (reverse (m :: l))))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) d: M Hfa: Forall
(uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})))
(zip (reverse (m :: l))
(tail (reverse (m :: l))))
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (reverse (m :: l)) (tail (reverse (m :: l))))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) d: M Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (reverse (m :: l))
(tail (reverse (m :: l))))
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (reverse (m :: l)) (tail (reverse (m :: l))))
apply Hfa.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
is_witnessing_sequence_old m (reverse l)
β is_witnessing_sequence m l
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) H: is_witnessing_sequence_old m (reverse l)
is_witnessing_sequence m l
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) Hlast: last (reverse l) = Some m H2: match reverse l with
| [] => False
| mβ :: ms =>
mβ β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (mβ :: ms) ms)
end
is_witnessing_sequence m l
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) Hlast: last (reverse []) = Some m H2: match reverse [] with
| [] => False
| mβ :: ms =>
mβ β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (mβ :: ms) ms)
end
is_witnessing_sequence m []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) Hlast: last (reverse (x :: l)) = Some m H2: match reverse (x :: l) with
| [] => False
| mβ :: ms =>
mβ β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (mβ :: ms) ms)
end
is_witnessing_sequence m (x :: l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) Hlast: last (reverse []) = Some m H2: match reverse [] with
| [] => False
| mβ :: ms =>
mβ β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (mβ :: ms) ms)
end
is_witnessing_sequence m []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) Hlast: None = Some m H2: match reverse [] with
| [] => False
| mβ :: ms =>
mβ β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (mβ :: ms) ms)
end
is_witnessing_sequence m []
inversion Hlast.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) Hlast: last (reverse (x :: l)) = Some m H2: match reverse (x :: l) with
| [] => False
| mβ :: ms =>
mβ β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (mβ :: ms) ms)
end
is_witnessing_sequence m (x :: l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) Heq: reverse (x :: l) = [] Hlast: last [] = Some m H2: False
is_witnessing_sequence m (x :: l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Heq: reverse (x :: l) = y :: ys Hlast: last (y :: ys) = Some m H2: y β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys)
is_witnessing_sequence m (x :: l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) Heq: reverse (x :: l) = [] Hlast: last [] = Some m H2: False
is_witnessing_sequence m (x :: l)
inversion H2.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Heq: reverse (x :: l) = y :: ys Hlast: last (y :: ys) = Some m H2: y β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys)
is_witnessing_sequence m (x :: l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Heq: reverse (x :: l) = y :: ys Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys)
is_witnessing_sequence m (x :: l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: reverse (x :: l) = reverse (reverse (y :: ys))
is_witnessing_sequence m (x :: l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
is_witnessing_sequence m (x :: l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: reverse (x :: l) = reverse (reverse (y :: ys))
Inj eq eq reverse
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
is_witnessing_sequence m (x :: l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
βlst : M,
last (x :: l) = Some lst β§ lst β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
head (x :: l) = Some m
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (x :: l) (tail (x :: l)))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
βlst : M,
last (x :: l) = Some lst β§ lst β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
last (x :: l) = Some y β§ y β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
last (x :: l) = Some y
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
y β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
last (reverse (y :: ys)) = Some y
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
y β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
head (y :: ys) = Some y
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
y β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
y β eval Ο base
apply Hbase.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
head (x :: l) = Some m
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (x :: l) (tail (x :: l)))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
head (x :: l) = Some m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (x :: l) (tail (x :: l)))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
head (x :: l) = Some m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
head (reverse (y :: ys)) = Some m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
last (y :: ys) = Some m
apply Hlast.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (x :: l) (tail (x :: l)))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
(Ξ»newold : M, new β app_ext (eval Ο step) {[old]}) =
flip
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys) Hfeq': (Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) =
flip
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (x :: l) (tail (x :: l)))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
(Ξ»newold : M, new β app_ext (eval Ο step) {[old]}) =
flip
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys)
βx : M,
(Ξ»old : M, x β app_ext (eval Ο step) {[old]}) =
flip
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) x
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys) x0: M
(Ξ»old : M, x0 β app_ext (eval Ο step) {[old]}) =
flip
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) x0
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys) x0: M
βx : M,
(x0 β app_ext (eval Ο step) {[x]}) =
flip
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) x0 x
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys) x0, x1: M
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys) Hfeq': (Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) =
flip
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (x :: l) (tail (x :: l)))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys) Hfeq': (Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) =
flip
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys) Hfeq': (Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) =
flip
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys) Hfeq': (Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) =
flip
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x: M l: list M Feq: uncurry
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) =
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) y: M ys: list M Hlast: last (y :: ys) = Some m Hbase: y β eval Ο base Hfa: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) ys) Heq: x :: l = reverse (y :: ys) Hfeq': (Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) =
flip
(flip
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (y :: ys) (tail (y :: ys)))
apply Hfa.Qed.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M l: list M
is_witnessing_sequence m l
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
β is_witnessing_sequence m' (m' :: l) β§ l β []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M l: list M
is_witnessing_sequence m l
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
β is_witnessing_sequence m' (m' :: l) β§ l β []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M l: list M
is_witnessing_sequence m l
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
β is_witnessing_sequence m' (m' :: l) β§ l β []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M l: list M
is_witnessing_sequence m' (m' :: l) β§ l β []
β is_witnessing_sequence m l
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M l: list M
is_witnessing_sequence m l
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
β is_witnessing_sequence m' (m' :: l) β§ l β []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M l: list M lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
is_witnessing_sequence m' (m' :: l) β§ l β []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M l: list M lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
is_witnessing_sequence m' (m' :: l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M l: list M lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
l β []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M l: list M lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
l β []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', lst: M Hlst: last [] = Some lst Hbase: lst β eval Ο base Hhd: head [] = Some m Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail [])) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
[] β []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', d: M l: list M lst: M Hlst: last (d :: l) = Some lst Hbase: lst β eval Ο base Hhd: head (d :: l) = Some m Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (d :: l) (tail (d :: l))) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
d :: l β []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', lst: M Hlst: last [] = Some lst Hbase: lst β eval Ο base Hhd: None = Some m Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail [])) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
[] β []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', d: M l: list M lst: M Hlst: last (d :: l) = Some lst Hbase: lst β eval Ο base Hhd: head (d :: l) = Some m Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (d :: l) (tail (d :: l))) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
d :: l β []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', d: M l: list M lst: M Hlst: last (d :: l) = Some lst Hbase: lst β eval Ο base Hhd: head (d :: l) = Some m Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (d :: l) (tail (d :: l))) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
d :: l β []
discriminate.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M l: list M lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hhd: head l = Some m Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l)) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
is_witnessing_sequence m' (m' :: l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M l: list M lst: M Hlst: last l = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l))
βm : M,
head l = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' (m' :: l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hlst: last [] = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail [])) m: M Hhd: head [] = Some m m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
is_witnessing_sequence m' [m']
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M a: M l: list M lst: M Hlst: last (a :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (a :: l) (tail (a :: l))) IHl: last l = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l))
β βm : M,
head l = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: l) m: M Hhd: head (a :: l) = Some m m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
is_witnessing_sequence m' (m' :: a :: l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hlst: last [] = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail [])) m: M Hhd: head [] = Some m m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
is_witnessing_sequence m' [m']
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hlst: last [] = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail [])) m: M Hhd: None = Some m m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
is_witnessing_sequence m' [m']
inversion Hhd.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M a: M l: list M lst: M Hlst: last (a :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (a :: l) (tail (a :: l))) IHl: last l = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l))
β βm : M,
head l = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: l) m: M Hhd: head (a :: l) = Some m m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
is_witnessing_sequence m' (m' :: a :: l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M a: M l: list M lst: M Hlst: last (a :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (a :: l) (tail (a :: l))) IHl: last l = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l))
β βm : M,
head l = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: l) m: M Hhd: Some a = Some m m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
is_witnessing_sequence m' (m' :: a :: l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M a: M l: list M lst: M Hlst: last (a :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (a :: l) (tail (a :: l))) IHl: last l = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l))
β βm : M,
head l = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: l) m: M Hhd: Some a = Some m m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step H0: a = m
is_witnessing_sequence m' (m' :: m :: l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M l: list M lst, m: M Hhd: Some m = Some m Hlst: last (m :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) IHl: last l = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l))
β βm : M,
head l = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
is_witnessing_sequence m' (m' :: m :: l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M l: list M lst, m: M Hlst: last (m :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) IHl: last l = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l))
β βm : M,
head l = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
is_witnessing_sequence m' (m' :: m :: l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M l: list M lst, m: M Hlst: last (m :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: l) (tail (m :: l))) IHl: last l = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip l (tail l))
β βm : M,
head l = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
(βlst : M,
last (m' :: m :: l) = Some lst β§ lst β eval Ο base)
β§ head (m' :: m :: l) = Some m'
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m' :: m :: l) (tail (m' :: m :: l)))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst, m: M Hlst: last [m] = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [m] (tail [m])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
(βlst : M,
last [m'; m] = Some lst β§ lst β eval Ο base)
β§ head [m'; m] = Some m'
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [m'; m] (tail [m'; m]))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (d :: l) (tail (d :: l)))
β βm : M,
head (d :: l) = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
(βlst : M,
last (m' :: m :: d :: l) = Some lst
β§ lst β eval Ο base)
β§ head (m' :: m :: d :: l) = Some m'
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m' :: m :: d :: l)
(tail (m' :: m :: d :: l)))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst, m: M Hlst: last [m] = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [m] (tail [m])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
(βlst : M,
last [m'; m] = Some lst β§ lst β eval Ο base)
β§ head [m'; m] = Some m'
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [m'; m] (tail [m'; m]))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst, m: M Hlst: Some m = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [m] (tail [m])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
(βlst : M,
last [m'; m] = Some lst β§ lst β eval Ο base)
β§ head [m'; m] = Some m'
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [m'; m] (tail [m'; m]))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst, m: M Hlst: Some m = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [m] (tail [m])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step H0: m = lst
(βlst0 : M,
last [m'; lst] = Some lst0 β§ lst0 β eval Ο base)
β§ head [m'; lst] = Some m'
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [m'; lst] (tail [m'; lst]))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hlst: Some lst = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
(βlst0 : M,
last [m'; lst] = Some lst0 β§ lst0 β eval Ο base)
β§ head [m'; lst] = Some m'
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [m'; lst] (tail [m'; lst]))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
(βlst0 : M,
last [m'; lst] = Some lst0 β§ lst0 β eval Ο base)
β§ head [m'; lst] = Some m'
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [m'; lst] (tail [m'; lst]))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
βlst0 : M,
last [m'; lst] = Some lst0 β§ lst0 β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
head [m'; lst] = Some m'
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [m'; lst] (tail [m'; lst]))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
βlst0 : M,
last [m'; lst] = Some lst0 β§ lst0 β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
last [m'; lst] = Some lst β§ lst β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
Some lst = Some lst β§ lst β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
Some lst = Some lst
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
lst β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
lst β eval Ο base
apply Hbase.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
head [m'; lst] = Some m'
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [m'; lst] (tail [m'; lst]))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
Some m' = Some m'
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
[(m', lst)]
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
Some m' = Some m'
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
[(m', lst)]
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
[(m', lst)]
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
uncurry
(Ξ»newold : M, new β app_ext (eval Ο step) {[old]})
(m', lst)
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
uncurry
(Ξ»newold : M, new β app_ext (eval Ο step) {[old]})
(m', lst)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
βre : M,
step' β eval Ο step
β§ re β {[lst]} β§ m' β app_interp M step' re
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
step' β eval Ο step
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
lst β {[lst]} β§ m' β app_interp M step' lst
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
lst β {[lst]} β§ m' β app_interp M step' lst
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
lst β {[lst]}
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
m' β app_interp M step' lst
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
m' β app_interp M step' lst
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]})) []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M lst: M Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [lst] (tail [lst])) IHl: last [] = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip [] (tail []))
β βm : M,
head [] = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m' [m'] m', step': M Hm': m' β app_interp M step' lst Hstep': step' β eval Ο step
True
exact I.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (d :: l) (tail (d :: l)))
β βm : M,
head (d :: l) = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
(βlst : M,
last (m' :: m :: d :: l) = Some lst
β§ lst β eval Ο base)
β§ head (m' :: m :: d :: l) = Some m'
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m' :: m :: d :: l)
(tail (m' :: m :: d :: l)))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (d :: l) (tail (d :: l)))
β βm : M,
head (d :: l) = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
βlst : M,
last (m' :: m :: d :: l) = Some lst
β§ lst β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (d :: l) (tail (d :: l)))
β βm : M,
head (d :: l) = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
head (m' :: m :: d :: l) = Some m'
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m' :: m :: d :: l)
(tail (m' :: m :: d :: l)))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (d :: l) (tail (d :: l)))
β βm : M,
head (d :: l) = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
βlst : M,
last (m' :: m :: d :: l) = Some lst
β§ lst β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (d :: l) (tail (d :: l)))
β βm : M,
head (d :: l) = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
last (m' :: m :: d :: l) = Some lst
β§ lst β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (d :: l) (tail (d :: l)))
β βm : M,
head (d :: l) = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
last (m' :: m :: d :: l) = Some lst
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (d :: l) (tail (d :: l)))
β βm : M,
head (d :: l) = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
lst β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (d :: l) (tail (d :: l)))
β βm : M,
head (d :: l) = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
last (d :: l) = Some lst
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (d :: l) (tail (d :: l)))
β βm : M,
head (d :: l) = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
lst β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hlst: last (d :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (d :: l) (tail (d :: l)))
β βm : M,
head (d :: l) = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
last (d :: l) = Some lst
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (d :: l) (tail (d :: l)))
β βm : M,
head (d :: l) = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
lst β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (d :: l) (tail (d :: l)))
β βm : M,
head (d :: l) = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
lst β eval Ο base
apply Hbase.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (d :: l) (tail (d :: l)))
β βm : M,
head (d :: l) = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
head (m' :: m :: d :: l) = Some m'
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m' :: m :: d :: l)
(tail (m' :: m :: d :: l)))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (d :: l) (tail (d :: l)))
β βm : M,
head (d :: l) = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
head (m' :: m :: d :: l) = Some m'
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (d :: l) (tail (d :: l)))
β βm : M,
head (d :: l) = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m' :: m :: d :: l) (tail (m' :: m :: d :: l)))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (d :: l) (tail (d :: l)))
β βm : M,
head (d :: l) = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
head (m' :: m :: d :: l) = Some m'
reflexivity.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) IHl: last (d :: l) = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (d :: l) (tail (d :: l)))
β βm : M,
head (d :: l) = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m' :: m :: d :: l) (tail (m' :: m :: d :: l)))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) IHl: last (d :: l) = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (d :: l) (tail (d :: l)))
β βm : M,
head (d :: l) = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m' :: m :: d :: l) (tail (m' :: m :: d :: l)))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) IHl: last (d :: l) = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (d :: l) (tail (d :: l)))
β βm : M,
head (d :: l) = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
((m', m)
:: (m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) IHl: last (d :: l) = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (d :: l) (tail (d :: l)))
β βm : M,
head (d :: l) = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
uncurry
(Ξ»newold : M, new β app_ext (eval Ο step) {[old]})
(m', m)
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hlst: last (m :: d :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) IHl: last (d :: l) = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
β βm : M,
Some d = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
uncurry
(Ξ»newold : M, new β app_ext (eval Ο step) {[old]})
(m', m)
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hlst: last (d :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) IHl: last (d :: l) = Some lst
β Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
β βm : M,
Some d = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
uncurry
(Ξ»newold : M, new β app_ext (eval Ο step) {[old]})
(m', m)
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hlst: last (d :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) IHl: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
β βm : M,
Some d = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step
uncurry
(Ξ»newold : M, new β app_ext (eval Ο step) {[old]})
(m', m)
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hlst: last (d :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) IHl: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
β βm : M,
Some d = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step x: (M * M)%type l0: list (M * M) H1: uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) (
m, d) H2: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end H: x = (m, d) H0: l0 =
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
uncurry
(Ξ»newold : M, new β app_ext (eval Ο step) {[old]})
(m', m)
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hlst: last (d :: l) = Some lst Hbase: lst β eval Ο base Hwit: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) IHl: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
β βm : M,
Some d = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step H1: uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) (
m, d) H2: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
uncurry
(Ξ»newold : M, new β app_ext (eval Ο step) {[old]})
(m', m)
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hlst: last (d :: l) = Some lst Hbase: lst β eval Ο base IHl: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
β βm : M,
Some d = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step H1: uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) (
m, d) H2: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
uncurry
(Ξ»newold : M, new β app_ext (eval Ο step) {[old]})
(m', m)
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hlst: last (d :: l) = Some lst Hbase: lst β eval Ο base IHl: βm : M,
Some d = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step H1: uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) (
m, d) H2: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
uncurry
(Ξ»newold : M, new β app_ext (eval Ο step) {[old]})
(m', m)
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hbase: lst β eval Ο base IHl: βm : M,
Some d = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step H1: uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) (
m, d)
uncurry
(Ξ»newold : M, new β app_ext (eval Ο step) {[old]})
(m', m)
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hbase: lst β eval Ο base IHl: βm : M,
Some d = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step H1: uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) (
m, d)
uncurry
(Ξ»newold : M, new β app_ext (eval Ο step) {[old]})
(m', m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hbase: lst β eval Ο base IHl: βm : M,
Some d = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step H1: uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) (
m, d)
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hbase: lst β eval Ο base IHl: βm : M,
Some d = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step H1: uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) (
m, d)
uncurry
(Ξ»newold : M, new β app_ext (eval Ο step) {[old]})
(m', m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hbase: lst β eval Ο base IHl: βm : M,
Some d = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step H1: uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) (
m, d)
βre : M,
step' β eval Ο step
β§ re β {[m]} β§ m' β app_interp M step' re
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hbase: lst β eval Ο base IHl: βm : M,
Some d = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step H1: uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) (
m, d)
step' β eval Ο step
β§ m β {[m]} β§ m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hbase: lst β eval Ο base IHl: βm : M,
Some d = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step H1: uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) (
m, d)
step' β eval Ο step
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hbase: lst β eval Ο base IHl: βm : M,
Some d = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step H1: uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) (
m, d)
m β {[m]} β§ m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hbase: lst β eval Ο base IHl: βm : M,
Some d = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step H1: uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) (
m, d)
m β {[m]} β§ m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hbase: lst β eval Ο base IHl: βm : M,
Some d = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step H1: uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) (
m, d)
m β {[m]}
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hbase: lst β eval Ο base IHl: βm : M,
Some d = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step H1: uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) (
m, d)
m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hbase: lst β eval Ο base IHl: βm : M,
Some d = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step H1: uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) (
m, d)
m' β app_interp M step' m
apply Hm'.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hbase: lst β eval Ο base IHl: βm : M,
Some d = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step H1: uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) (
m, d)
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hbase: lst β eval Ο base IHl: βm : M,
Some d = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step H1: uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) (
m, d)
uncurry
(Ξ»newold : M, new β app_ext (eval Ο step) {[old]})
(m, d)
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hbase: lst β eval Ο base IHl: βm : M,
Some d = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step H1: uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) (
m, d)
uncurry
(Ξ»newold : M, new β app_ext (eval Ο step) {[old]})
(m, d)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hbase: lst β eval Ο base IHl: βm : M,
Some d = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step H1: uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) (
m, d)
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hbase: lst β eval Ο base IHl: βm : M,
Some d = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step H1: uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) (
m, d)
uncurry
(Ξ»newold : M, new β app_ext (eval Ο step) {[old]})
(m, d)
apply H1.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hbase: lst β eval Ο base IHl: βm : M,
Some d = Some m
β βm'step' : M,
m' β app_interp M step' m
β step' β eval Ο step
β is_witnessing_sequence m'
(m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step H1: uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) (
m, d)
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hbase: lst β eval Ο base IHl: βm'step' : M,
m' β app_interp M step' d
β step' β eval Ο step
β is_witnessing_sequence m' (m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step H1: uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) (
m, d)
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hbase: lst β eval Ο base IHl: βm'step' : M,
m' β app_interp M step' d
β step' β eval Ο step
β is_witnessing_sequence m' (m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step step'', d'': M Hstep'': step'' β eval Ο step Hd'': d'' β {[d]} Hstep''d'': m β app_interp M step'' d''
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hbase: lst β eval Ο base IHl: βm'step' : M,
m' β app_interp M step' d
β step' β eval Ο step
β is_witnessing_sequence m' (m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step step'', d'': M Hstep'': step'' β eval Ο step Hd'': d'' β {[d]} Hstep''d'': m β app_interp M step'' d'' H: d = d''
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d'', x2) :: zip l l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hbase: lst β eval Ο base IHl: βm'step' : M,
m' β app_interp M step' d
β step' β eval Ο step
β is_witnessing_sequence m' (m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step step'': M Hstep'': step'' β eval Ο step Hstep''d'': m β app_interp M step'' d Hd'': d β {[d]}
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hbase: lst β eval Ο base IHl: βm'step' : M,
m' β app_interp M step' d
β step' β eval Ο step
β is_witnessing_sequence m' (m' :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step step'': M Hstep'': step'' β eval Ο step Hstep''d'': m β app_interp M step'' d
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hbase: lst β eval Ο base IHl: is_witnessing_sequence m (m :: d :: l) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step step'': M Hstep'': step'' β eval Ο step Hstep''d'': m β app_interp M step'' d
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hbase: lst β eval Ο base IHl: (βlst : M,
last (m :: d :: l) = Some lst
β§ lst β eval Ο base)
β§ head (m :: d :: l) = Some m
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
(zip (m :: d :: l) (tail (m :: d :: l))) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step step'': M Hstep'': step'' β eval Ο step Hstep''d'': m β app_interp M step'' d
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hbase: lst β eval Ο base IHl: (βlst : M,
last (d :: l) = Some lst β§ lst β eval Ο base)
β§ Some m = Some m
β§ Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step step'': M Hstep'': step'' β eval Ο step Hstep''d'': m β app_interp M step'' d
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hbase: lst β eval Ο base Hforall: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step step'': M Hstep'': step'' β eval Ο step Hstep''d'': m β app_interp M step'' d
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hbase: lst β eval Ο base Hforall: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step step'': M Hstep'': step'' β eval Ο step Hstep''d'': m β app_interp M step'' d x: (M * M)%type l0: list (M * M) H1: uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) (
m, d) H2: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end H: x = (m, d) H0: l0 =
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M d: M l: list M lst, m: M Hbase: lst β eval Ο base Hforall: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
((m, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) m', step': M Hm': m' β app_interp M step' m Hstep': step' β eval Ο step step'': M Hstep'': step'' β eval Ο step Hstep''d'': m β app_interp M step'' d H1: uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}) (
m, d) H2: Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Forall
(uncurry
(Ξ»newold : M,
new β app_ext (eval Ο step) {[old]}))
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
apply H2.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M l: list M
is_witnessing_sequence m' (m' :: l) β§ l β []
β is_witnessing_sequence m l
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Abort.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m' ((x :: l) ++ [m'])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m' ((x :: l) ++ [m'])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m' ((x :: l) ++ [m'])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M
last (x :: l) = Some m
β§ is_witnessing_sequence_old m' ((x :: l) ++ [m'])
β is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m' ((x :: l) ++ [m'])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hwit: is_witnessing_sequence_old m (x :: l) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
last (x :: l) = Some m
β§ is_witnessing_sequence_old m' ((x :: l) ++ [m'])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hwit1: last (x :: l) = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: l) l) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
last (x :: l) = Some m
β§ is_witnessing_sequence_old m' ((x :: l) ++ [m'])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hwit1: last (x :: l) = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: l) l) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
last (x :: l) = Some m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hwit1: last (x :: l) = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: l) l) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
is_witnessing_sequence_old m' ((x :: l) ++ [m'])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hwit1: last (x :: l) = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: l) l) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
last (x :: l) = Some m
apply Hwit1.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hwit1: last (x :: l) = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: l) l) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
is_witnessing_sequence_old m' ((x :: l) ++ [m'])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hwit1: last (x :: l) = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: l) l) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
last ((x :: l) ++ [m']) = Some m'
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hwit1: last (x :: l) = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: l) l) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
match (x :: l) ++ [m'] with
| [] => False
| mβ :: ms =>
mβ β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (mβ :: ms) ms)
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hwit1: last (x :: l) = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: l) l) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
last ((x :: l) ++ [m']) = Some m'
apply last_snoc.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hwit1: last (x :: l) = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: l) l) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
match (x :: l) ++ [m'] with
| [] => False
| mβ :: ms =>
mβ β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (mβ :: ms) ms)
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hwit1: last (x :: l) = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: l) l) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
x β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hwit1: last (x :: l) = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: l) l) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
x β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hwit1: last (x :: l) = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: l) l) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hwit1: last (x :: l) = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: l) l) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
x β eval Ο base
apply Hwit2.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hwit1: last (x :: l) = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: l) l) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [x] []) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match [] ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: d :: l) (d :: l)) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match (d :: l) ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip ((d :: l) ++ [m']) l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [x] []) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match [] ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [x] []) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [(x, m')]
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [x] []) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
m' β app_ext (eval Ο step) {[x]}
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [x] []) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
m' β app_ext (eval Ο step) {[x]}
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [x] []) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [x] []) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [x] []) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
True
exact I.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [x] []) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
m' β app_ext (eval Ο step) {[x]}
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [x] []) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
βre : M,
step' β eval Ο step
β§ re β {[x]} β§ m' β app_interp M step' re
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [x] []) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
step' β eval Ο step
β§ x β {[x]} β§ m' β app_interp M step' x
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [x] []) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
step' β eval Ο step
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [x] []) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
x β {[x]} β§ m' β app_interp M step' x
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [x] []) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
step' β eval Ο step
apply Hstep'.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [x] []) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
x β {[x]} β§ m' β app_interp M step' x
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [x] []) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
x β {[x]}
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [x] []) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
m' β app_interp M step' x
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [x] []) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
x β {[x]}
constructor.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit1: last [x] = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [x] []) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
m' β app_interp M step' x
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit1: Some x = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [x] []) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
m' β app_interp M step' x
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit1: Some x = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [x] []) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m H0: x = m
m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [m] []) Hwit2: m β eval Ο base Hwit1: Some m = Some m step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
m' β app_interp M step' m
apply Hm'.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: d :: l) (d :: l)) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match (d :: l) ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip ((d :: l) ++ [m']) l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: d :: l) (d :: l)) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((x, d)
:: match l ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2
end)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: d :: l) (d :: l)) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
d β app_ext (eval Ο step) {[x]}
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((x, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
d β app_ext (eval Ο step) {[x]}
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((x, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m x0: (M * M)%type l0: list (M * M) H1: d β app_ext (eval Ο step) {[x]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end H: x0 = (x, d) H0: l0 =
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
d β app_ext (eval Ο step) {[x]}
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x β eval Ο base Hwit3: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((x, d)
:: match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end) step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m H1: d β app_ext (eval Ο step) {[x]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
d β app_ext (eval Ο step) {[x]}
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m H1: d β app_ext (eval Ο step) {[x]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
d β app_ext (eval Ο step) {[x]}
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m Hd: d β app_ext (eval Ο step) {[x]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
d β app_ext (eval Ο step) {[x]}
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m Hd: d β app_ext (eval Ο step) {[x]} Hwit: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
d β app_ext (eval Ο step) {[x]}
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m Hd: d β app_ext (eval Ο step) {[x]} Hwit: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
d β app_ext (eval Ο step) {[x]}
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m Hd: d β app_ext (eval Ο step) {[x]} Hwit: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m Hd: d β app_ext (eval Ο step) {[x]} Hwit: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
d β app_ext (eval Ο step) {[x]}
apply Hd.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m Hd: d β app_ext (eval Ο step) {[x]} Hwit: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', d: M l: list M Hwit1: last (x :: d :: l) = Some m Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m Hwit: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
βd : M,
last (x :: d :: l) = Some m
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip (l ++ [m']) l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
βd : M,
last [x; d] = Some m
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) []
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match [] ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip ([] ++ [m']) l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', a: M l: list M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m IHl: βd : M,
last (x :: d :: l) = Some m
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end
βd : M,
last (x :: d :: a :: l) = Some m
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((d, a) :: zip (a :: l) l)
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match (a :: l) ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip ((a :: l) ++ [m']) l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
βd : M,
last [x; d] = Some m
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) []
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match [] ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip ([] ++ [m']) l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m D: M Hm: last [x; D] = Some m
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match [] ++ [m'] with
| [] => []
| x2 :: l2 => (D, x2) :: zip ([] ++ [m']) l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m D: M Hm: last [x; D] = Some m
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [(D, m')]
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m D: M Hm: Some D = Some m
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [(D, m')]
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m D: M Hm: Some D = Some m H0: D = m
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [(m, m')]
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m Hm: Some m = Some m
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [(m, m')]
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [(m, m')]
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
m' β app_ext (eval Ο step) {[m]}
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
m' β app_ext (eval Ο step) {[m]}
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
True
exact I.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
m' β app_ext (eval Ο step) {[m]}
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
βre : M,
step' β eval Ο step
β§ re β {[m]} β§ m' β app_interp M step' re
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
step' β eval Ο step
β§ m β {[m]} β§ m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
step' β eval Ο step
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
m β {[m]} β§ m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
step' β eval Ο step
apply Hstep'.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
m β {[m]} β§ m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
m β {[m]}
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
m β {[m]}
constructor.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m
m' β app_interp M step' m
apply Hm'.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', a: M l: list M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m IHl: βd : M,
last (x :: d :: l) = Some m
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end
βd : M,
last (x :: d :: a :: l) = Some m
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((d, a) :: zip (a :: l) l)
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match (a :: l) ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip ((a :: l) ++ [m']) l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', a: M l: list M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m IHl: βd : M,
last (x :: d :: l) = Some m
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (x :: d :: a :: l) = Some m Hwit: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((d, a) :: zip (a :: l) l)
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match (a :: l) ++ [m'] with
| [] => []
| x2 :: l2 => (d, x2) :: zip ((a :: l) ++ [m']) l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', a: M l: list M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m IHl: βd : M,
last (x :: d :: l) = Some m
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (x :: d :: a :: l) = Some m Hwit: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((d, a) :: zip (a :: l) l)
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((d, a)
:: match l ++ [m'] with
| [] => []
| x2 :: l2 => (a, x2) :: zip (l ++ [m']) l2
end)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', a: M l: list M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m IHl: βd : M,
last (x :: d :: l) = Some m
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (x :: d :: a :: l) = Some m Hwit: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((d, a) :: zip (a :: l) l) x0: (M * M)%type l0: list (M * M) H1: a β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end H: x0 = (d, a) H0: l0 =
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((d, a)
:: match l ++ [m'] with
| [] => []
| x2 :: l2 => (a, x2) :: zip (l ++ [m']) l2
end)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', a: M l: list M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m IHl: βd : M,
last (x :: d :: l) = Some m
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (x :: d :: a :: l) = Some m Hwit: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((d, a) :: zip (a :: l) l) H1: a β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((d, a)
:: match l ++ [m'] with
| [] => []
| x2 :: l2 => (a, x2) :: zip (l ++ [m']) l2
end)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', a: M l: list M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m IHl: βd : M,
last (x :: d :: l) = Some m
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (x :: d :: a :: l) = Some m Hwit: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((d, a) :: zip (a :: l) l) H1: a β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
a β app_ext (eval Ο step) {[d]}
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (a, x2) :: zip (l ++ [m']) l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', a: M l: list M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m IHl: βd : M,
last (x :: d :: l) = Some m
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (x :: d :: a :: l) = Some m Hwit: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((d, a) :: zip (a :: l) l) H1: a β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
a β app_ext (eval Ο step) {[d]}
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', a: M l: list M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m IHl: βd : M,
last (x :: d :: l) = Some m
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (x :: d :: a :: l) = Some m Hwit: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((d, a) :: zip (a :: l) l) H1: a β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (a, x2) :: zip (l ++ [m']) l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', a: M l: list M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m IHl: βd : M,
last (x :: d :: l) = Some m
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (x :: d :: a :: l) = Some m Hwit: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((d, a) :: zip (a :: l) l) H1: a β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
a β app_ext (eval Ο step) {[d]}
apply H1.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', a: M l: list M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m IHl: βd : M,
last (x :: d :: l) = Some m
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (x :: d :: a :: l) = Some m Hwit: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((d, a) :: zip (a :: l) l) H1: a β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (a, x2) :: zip (l ++ [m']) l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', a: M l: list M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m IHl: βd : M,
last (x :: d :: l) = Some m
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (x :: d :: a :: l) = Some m Hwit: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((d, a) :: zip (a :: l) l) H1: a β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
last (x :: a :: l) = Some m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', a: M l: list M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m IHl: βd : M,
last (x :: d :: l) = Some m
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (x :: d :: a :: l) = Some m Hwit: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((d, a) :: zip (a :: l) l) H1: a β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', a: M l: list M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m IHl: βd : M,
last (x :: d :: l) = Some m
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (a :: l) = Some m Hwit: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((d, a) :: zip (a :: l) l) H1: a β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
last (x :: a :: l) = Some m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', a: M l: list M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m IHl: βd : M,
last (x :: d :: l) = Some m
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (x :: d :: a :: l) = Some m Hwit: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((d, a) :: zip (a :: l) l) H1: a β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', a: M l: list M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m IHl: βd : M,
last (x :: d :: l) = Some m
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (a :: l) = Some m Hwit: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((d, a) :: zip (a :: l) l) H1: a β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
last (a :: l) = Some m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', a: M l: list M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m IHl: βd : M,
last (x :: d :: l) = Some m
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (x :: d :: a :: l) = Some m Hwit: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((d, a) :: zip (a :: l) l) H1: a β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m', a: M l: list M Hwit2: x β eval Ο base step': M Hstep': step' β eval Ο step Hm': m' β app_interp M step' m IHl: βd : M,
last (x :: d :: l) = Some m
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (d, x2) :: zip l l2
end
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(d, x2) :: zip (l ++ [m']) l2
end d: M Hlast: last (x :: d :: a :: l) = Some m Hwit: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((d, a) :: zip (a :: l) l) H1: a β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (a, x2) :: zip l l2
end
apply H2.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M
last (x :: l) = Some m
β§ is_witnessing_sequence_old m' ((x :: l) ++ [m'])
β is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m H: is_witnessing_sequence_old m' ((x :: l) ++ [m'])
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m H: is_witnessing_sequence_old m' ((x :: l) ++ [m'])
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m H: match (x :: l) ++ [m'] with
| [] => False
| mβ :: ms =>
mβ β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (mβ :: ms) ms)
end
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m H: match (x :: l) ++ [m'] with
| [] => False
| mβ :: ms =>
mβ β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (mβ :: ms) ms)
end len: nat Heqlen: len = length l
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m H: match (x :: l) ++ [m'] with
| [] => False
| mβ :: ms =>
mβ β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (mβ :: ms) ms)
end len: nat Heqlen: len = length l
length l β€ len
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m H: match (x :: l) ++ [m'] with
| [] => False
| mβ :: ms =>
mβ β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (mβ :: ms) ms)
end len: nat Heqlen: len = length l Hlen: length l β€ len
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m H: match (x :: l) ++ [m'] with
| [] => False
| mβ :: ms =>
mβ β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (mβ :: ms) ms)
end len: nat Heqlen: len = length l
length l β€ len
lia.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m H: match (x :: l) ++ [m'] with
| [] => False
| mβ :: ms =>
mβ β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (mβ :: ms) ms)
end len: nat Heqlen: len = length l Hlen: length l β€ len
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m H: match (x :: l) ++ [m'] with
| [] => False
| mβ :: ms =>
mβ β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (mβ :: ms) ms)
end len: nat Hlen: length l β€ len
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m H: x β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end len: nat Hlen: length l β€ len
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m Hbase: x β eval Ο base Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end len: nat Hlen: length l β€ len
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m Hbase: x β eval Ο base Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end len: nat Hlen: length l β€ len
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m Hbase: x β eval Ο base Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end len: nat Hlen: length l β€ len
last (x :: l) = Some m
β§ (x β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: l) l))
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m Hbase: x β eval Ο base Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end len: nat Hlen: length l β€ len
last (x :: l) = Some m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m Hbase: x β eval Ο base Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end len: nat Hlen: length l β€ len
(x β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: l) l))
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m Hbase: x β eval Ο base Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end len: nat Hlen: length l β€ len
last (x :: l) = Some m
apply Hlast.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m Hbase: x β eval Ο base Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end len: nat Hlen: length l β€ len
(x β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: l) l))
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m Hbase: x β eval Ο base Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end len: nat Hlen: length l β€ len
x β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m Hbase: x β eval Ο base Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end len: nat Hlen: length l β€ len
x β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m Hbase: x β eval Ο base Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end len: nat Hlen: length l β€ len
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m Hbase: x β eval Ο base Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end len: nat Hlen: length l β€ len
x β eval Ο base
apply Hbase.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m Hbase: x β eval Ο base Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end len: nat Hlen: length l β€ len
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, x, m': M l: list M Hlast: last (x :: l) = Some m Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end len: nat Hlen: length l β€ len
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat
β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M
β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end
β length l β€ 0
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end
β length l β€ S len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M
β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end
β length l β€ 0
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', x: M l: list M Hlast: last (x :: l) = Some m Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end Hlen: length l β€ 0
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', x: M Hlast: last [x] = Some m Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match [] ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2
end Hlen: length [] β€ 0
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) (zip [x] [])
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', x, d: M l: list M Hlast: last (x :: d :: l) = Some m Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match (d :: l) ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip ((d :: l) ++ [m']) l2
end Hlen: length (d :: l) β€ 0
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: d :: l) (d :: l))
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', x, d: M l: list M Hlast: last (x :: d :: l) = Some m Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match (d :: l) ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip ((d :: l) ++ [m']) l2
end Hlen: length (d :: l) β€ 0
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: d :: l) (d :: l))
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', x, d: M l: list M Hlast: last (x :: d :: l) = Some m Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match (d :: l) ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip ((d :: l) ++ [m']) l2
end Hlen: S (length l) β€ 0
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: d :: l) (d :: l))
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
lia.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', x: M Hlast: last [x] = Some m Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match [] ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2
end Hlen: length [] β€ 0
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) (zip [x] [])
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', x: M Hlast: last [x] = Some m Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match [] ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2
end Hlen: length [] β€ 0
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) []
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', x: M Hlast: last [x] = Some m Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
[(x, m')] Hlen: length [] β€ 0
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) []
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', x: M Hlast: last [x] = Some m Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
[(x, m')] Hlen: length [] β€ 0
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', x: M Hlast: last [x] = Some m Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
[(x, m')] Hlen: length [] β€ 0
βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', x: M Hlast: last [x] = Some m Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
[(x, m')] Hlen: length [] β€ 0
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', x: M Hlast: last [x] = Some m Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
[(x, m')] Hlen: length [] β€ 0
True
exact I.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', x: M Hlast: last [x] = Some m Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
[(x, m')] Hlen: length [] β€ 0
βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', x: M Hlast: last [x] = Some m Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
[(x, m')] Hlen: length [] β€ 0 x0: (M * M)%type l: list (M * M) H1: m' β app_ext (eval Ο step) {[x]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] H: x0 = (x, m') H0: l = []
βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', x: M Hlast: last [x] = Some m Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
[(x, m')] Hlen: length [] β€ 0 H1: m' β app_ext (eval Ο step) {[x]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) []
βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', x: M Hlast: last [x] = Some m Hlen: length [] β€ 0 H1: m' β app_ext (eval Ο step) {[x]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) []
βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', x: M Hlast: last [x] = Some m Hlen: length [] β€ 0 H1: m' β app_ext (eval Ο step) {[x]}
βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', x: M Hlast: last [x] = Some m Hlen: length [] β€ 0 step', m'': M Hstep': step' β eval Ο step Hm'm'': m'' β {[x]} Hstep'm'': m' β app_interp M step' m''
βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', x: M Hlast: last [x] = Some m Hlen: length [] β€ 0 step', m'': M Hstep': step' β eval Ο step Hm'm'': m'' β {[x]} Hstep'm'': m' β app_interp M step' m'' H: x = m''
βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', m'': M Hlast: last [m''] = Some m Hlen: length [] β€ 0 step': M Hstep': step' β eval Ο step Hm'm'': m'' β {[m'']} Hstep'm'': m' β app_interp M step' m''
βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', m'': M Hlast: last [m''] = Some m Hlen: length [] β€ 0 step': M Hstep': step' β eval Ο step Hstep'm'': m' β app_interp M step' m''
βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', m'': M Hlast: last [m''] = Some m Hlen: length [] β€ 0 step': M Hstep': step' β eval Ο step Hstep'm'': m' β app_interp M step' m''
step' β eval Ο step β§ m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', m'': M Hlast: last [m''] = Some m Hlen: length [] β€ 0 step': M Hstep': step' β eval Ο step Hstep'm'': m' β app_interp M step' m''
step' β eval Ο step
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', m'': M Hlast: last [m''] = Some m Hlen: length [] β€ 0 step': M Hstep': step' β eval Ο step Hstep'm'': m' β app_interp M step' m''
m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', m'': M Hlast: last [m''] = Some m Hlen: length [] β€ 0 step': M Hstep': step' β eval Ο step Hstep'm'': m' β app_interp M step' m''
m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', m'': M Hlast: Some m'' = Some m Hlen: length [] β€ 0 step': M Hstep': step' β eval Ο step Hstep'm'': m' β app_interp M step' m''
m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m', m'': M Hlast: Some m'' = Some m Hlen: length [] β€ 0 step': M Hstep': step' β eval Ο step Hstep'm'': m' β app_interp M step' m'' H0: m'' = m
m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M Hlast: Some m = Some m Hlen: length [] β€ 0 step': M Hstep': step' β eval Ο step Hstep'm'': m' β app_interp M step' m
m' β app_interp M step' m
apply Hstep'm''.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end
β length l β€ S len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) x: M l: list M Hlast: last (x :: l) = Some m Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip (l ++ [m']) l2
end Hlen: length l β€ S len
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) x: M Hlast: last [x] = Some m Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match [] ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2
end Hlen: length [] β€ S len
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) (zip [x] [])
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) x, x': M l': list M Hlast: last (x :: x' :: l') = Some m Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match (x' :: l') ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip ((x' :: l') ++ [m']) l2
end Hlen: length (x' :: l') β€ S len
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: x' :: l') (x' :: l'))
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) x: M Hlast: last [x] = Some m Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match [] ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2
end Hlen: length [] β€ S len
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) (zip [x] [])
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) x: M Hlast: Some x = Some m Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match [] ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2
end Hlen: length [] β€ S len
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) (zip [x] [])
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) x: M Hlast: Some x = Some m Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match [] ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2
end Hlen: length [] β€ S len H0: x = m
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) (zip [m] [])
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) x: M Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match [] ++ [m'] with
| [] => []
| x2 :: l2 => (x, x2) :: zip ([] ++ [m']) l2
end Hlen: length [] β€ S len H0: x = m
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) (zip [m] [])
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match [] ++ [m'] with
| [] => []
| x2 :: l2 => (m, x2) :: zip ([] ++ [m']) l2
end Hlen: length [] β€ S len
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) (zip [m] [])
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
[(m, m')] Hlen: length [] β€ S len
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) (zip [m] [])
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
[(m, m')] Hlen: length [] β€ S len x: (M * M)%type l: list (M * M) H1: m' β app_ext (eval Ο step) {[m]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] H: x = (m, m') H0: l = []
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) (zip [m] [])
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
[(m, m')] Hlen: length [] β€ S len H1: m' β app_ext (eval Ο step) {[m]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) []
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) (zip [m] [])
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) Hlen: length [] β€ S len H1: m' β app_ext (eval Ο step) {[m]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) []
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) (zip [m] [])
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) Hlen: length [] β€ S len H1: m' β app_ext (eval Ο step) {[m]}
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) (zip [m] [])
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) Hlen: length [] β€ S len H1: m' β app_ext (eval Ο step) {[m]}
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) []
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) Hlen: length [] β€ S len H1: m' β app_ext (eval Ο step) {[m]}
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) Hlen: length [] β€ S len H1: m' β app_ext (eval Ο step) {[m]}
βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) Hlen: length [] β€ S len H1: m' β app_ext (eval Ο step) {[m]}
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) Hlen: length [] β€ S len H1: m' β app_ext (eval Ο step) {[m]}
True
exact I.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) Hlen: length [] β€ S len H1: m' β app_ext (eval Ο step) {[m]}
βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) Hlen: length [] β€ S len step': M Hstep': βre : M,
step' β eval Ο step
β§ re β {[m]} β§ m' β app_interp M step' re
βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) Hlen: length [] β€ S len step': M Hstep': βre : M,
step' β eval Ο step
β§ re β {[m]} β§ m' β app_interp M step' re
step' β eval Ο step β§ m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) Hlen: length [] β€ S len step', m'': M Hstep': step' β eval Ο step Hmm'': m'' β {[m]} Hm'': m' β app_interp M step' m''
step' β eval Ο step β§ m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) Hlen: length [] β€ S len step', m'': M Hstep': step' β eval Ο step Hmm'': m'' β {[m]} Hm'': m' β app_interp M step' m''
step' β eval Ο step
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) Hlen: length [] β€ S len step', m'': M Hstep': step' β eval Ο step Hmm'': m'' β {[m]} Hm'': m' β app_interp M step' m''
m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) Hlen: length [] β€ S len step', m'': M Hstep': step' β eval Ο step Hmm'': m'' β {[m]} Hm'': m' β app_interp M step' m''
step' β eval Ο step
apply Hstep'.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) Hlen: length [] β€ S len step', m'': M Hstep': step' β eval Ο step Hmm'': m'' β {[m]} Hm'': m' β app_interp M step' m''
m' β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) Hlen: length [] β€ S len step', m'': M Hstep': step' β eval Ο step Hmm'': m'' β {[m]} Hm'': m' β app_interp M step' m'' H: m = m''
m' β app_interp M step' m''
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m': M len: nat m'': M IHlen: β (x : M) (l : list M),
last (x :: l) = Some m''
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m'') Hlen: length [] β€ S len step': M Hstep': step' β eval Ο step Hmm'': m'' β {[m'']} Hm'': m' β app_interp M step' m''
m' β app_interp M step' m''
apply Hm''.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) x, x': M l': list M Hlast: last (x :: x' :: l') = Some m Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match (x' :: l') ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip ((x' :: l') ++ [m']) l2
end Hlen: length (x' :: l') β€ S len
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: x' :: l') (x' :: l'))
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
(zip (x :: l) l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) x, x': M l': list M Hlast: last (x :: x' :: l') = Some m Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((x, x')
:: match l' ++ [m'] with
| [] => []
| x2 :: l2 =>
(x', x2) :: zip (l' ++ [m']) l2
end) Hlen: length (x' :: l') β€ S len
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: x' :: l') (x' :: l'))
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (x, x2) :: zip l l2
end
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) x, x': M l': list M Hlast: last (x :: x' :: l') = Some m Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((x, x')
:: match l' ++ [m'] with
| [] => []
| x2 :: l2 =>
(x', x2) :: zip (l' ++ [m']) l2
end) Hlen: length (x' :: l') β€ S len
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: x' :: l') (x' :: l'))
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (x, x2) :: zip l l2
end
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) x, x': M l': list M Hlast: last (x' :: l') = Some m Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((x, x')
:: match l' ++ [m'] with
| [] => []
| x2 :: l2 =>
(x', x2) :: zip (l' ++ [m']) l2
end) Hlen: length (x' :: l') β€ S len
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: x' :: l') (x' :: l'))
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (x, x2) :: zip l l2
end
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) x, x': M l': list M Hlast: last (x' :: l') = Some m Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((x, x')
:: match l' ++ [m'] with
| [] => []
| x2 :: l2 =>
(x', x2) :: zip (l' ++ [m']) l2
end) Hlen: length (x' :: l') β€ S len x0: (M * M)%type l: list (M * M) H1: x' β app_ext (eval Ο step) {[x]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' ++ [m'] with
| [] => []
| x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2
end H: x0 = (x, x') H0: l =
match l' ++ [m'] with
| [] => []
| x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2
end
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: x' :: l') (x' :: l'))
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (x, x2) :: zip l l2
end
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) x, x': M l': list M Hlast: last (x' :: l') = Some m Hall: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((x, x')
:: match l' ++ [m'] with
| [] => []
| x2 :: l2 =>
(x', x2) :: zip (l' ++ [m']) l2
end) Hlen: length (x' :: l') β€ S len H1: x' β app_ext (eval Ο step) {[x]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' ++ [m'] with
| [] => []
| x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2
end
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: x' :: l') (x' :: l'))
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat IHlen: β (x : M) (l : list M),
last (x :: l) = Some m
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new β app_ext (eval Ο step) {[old]})
match l ++ [m'] with
| [] => []
| x2 :: l2 =>
(x, x2) :: zip (l ++ [m']) l2
end
β length l β€ len
β Forall
(Ξ»x0 : M * M,
let (old, new) := x0 in
new
β app_ext (eval Ο step) {[old]})
match l with
| [] => []
| x2 :: l2 => (x, x2) :: zip l l2
end
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) x, x': M l': list M Hlast: last (x' :: l') = Some m Hlen: length (x' :: l') β€ S len H1: x' β app_ext (eval Ο step) {[x]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' ++ [m'] with
| [] => []
| x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2
end
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: x' :: l') (x' :: l'))
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat x': M l': list M IHlen: length l' β€ len
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) x: M Hlast: last (x' :: l') = Some m Hlen: length (x' :: l') β€ S len H1: x' β app_ext (eval Ο step) {[x]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' ++ [m'] with
| [] => []
| x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2
end
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (x :: x' :: l') (x' :: l'))
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat x': M l': list M IHlen: length l' β€ len
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) x: M Hlast: last (x' :: l') = Some m Hlen: length (x' :: l') β€ S len H1: x' β app_ext (eval Ο step) {[x]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' ++ [m'] with
| [] => []
| x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2
end
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((x, x')
:: match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end)
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat x': M l': list M IHlen: length l' β€ len
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) x: M Hlast: last (x' :: l') = Some m Hlen: length (x' :: l') β€ S len H1: x' β app_ext (eval Ο step) {[x]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' ++ [m'] with
| [] => []
| x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2
end
(x' β app_ext (eval Ο step) {[x]}
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end)
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat x': M l': list M IHlen: length l' β€ len
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) x: M Hlast: last (x' :: l') = Some m Hlen: length (x' :: l') β€ S len H1: x' β app_ext (eval Ο step) {[x]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' ++ [m'] with
| [] => []
| x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2
end
x' β app_ext (eval Ο step) {[x]}
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat x': M l': list M IHlen: length l' β€ len
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) x: M Hlast: last (x' :: l') = Some m Hlen: length (x' :: l') β€ S len H1: x' β app_ext (eval Ο step) {[x]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' ++ [m'] with
| [] => []
| x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2
end
x' β app_ext (eval Ο step) {[x]}
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat x': M l': list M IHlen: length l' β€ len
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) x: M Hlast: last (x' :: l') = Some m Hlen: length (x' :: l') β€ S len H1: x' β app_ext (eval Ο step) {[x]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' ++ [m'] with
| [] => []
| x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2
end
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat x': M l': list M IHlen: length l' β€ len
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) x: M Hlast: last (x' :: l') = Some m Hlen: length (x' :: l') β€ S len H1: x' β app_ext (eval Ο step) {[x]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' ++ [m'] with
| [] => []
| x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2
end
x' β app_ext (eval Ο step) {[x]}
apply H1.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat x': M l': list M IHlen: length l' β€ len
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) x: M Hlast: last (x' :: l') = Some m Hlen: length (x' :: l') β€ S len H1: x' β app_ext (eval Ο step) {[x]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' ++ [m'] with
| [] => []
| x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2
end
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
β§ (βstep' : M,
step' β eval Ο step β§ m' β app_interp M step' m)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat x': M l': list M IHlen: length l' β€ len
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) x: M Hlast: last (x' :: l') = Some m Hlen: length (x' :: l') β€ S len H1: x' β app_ext (eval Ο step) {[x]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' ++ [m'] with
| [] => []
| x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2
end
length l' β€ len
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, m': M len: nat x': M l': list M IHlen: length l' β€ len
β Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m) x: M Hlast: last (x' :: l') = Some m Hlen: S (length l') β€ S len H1: x' β app_ext (eval Ο step) {[x]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' ++ [m'] with
| [] => []
| x2 :: l2 => (x', x2) :: zip (l' ++ [m']) l2
end
length l' β€ len
lia.Qed.Definitionwitnessed_elements_old : propset (Domain M) :=
PropSet (Ξ»m, βl, is_witnessing_sequence_old m l).
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M
F witnessed_elements_old β witnessed_elements_old
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M
F witnessed_elements_old β witnessed_elements_old
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M
βx : M,
x β F witnessed_elements_old
β x β witnessed_elements_old
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M Hx: x β F witnessed_elements_old
x β witnessed_elements_old
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M Hx: x
β Fassoc Ο
patt_ind_gen_body^{svar:0β¦
fresh_svar patt_ind_gen_body}
(fresh_svar patt_ind_gen_body)
witnessed_elements_old
x β witnessed_elements_old
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M Hx: x
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
patt_ind_gen_body^{svar:0β¦
fresh_svar patt_ind_gen_body}
x β witnessed_elements_old
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M Hx: x
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
patt_ind_gen_body^[svar:0β¦
patt_free_svar (fresh_svar patt_ind_gen_body)]
x β witnessed_elements_old
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M Hx: x
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(((nest_mu base)^[svar:0β¦
patt_free_svar
(fresh_svar patt_ind_gen_body)] ---> β₯) --->
(nest_mu step)^[svar:0β¦
patt_free_svar
(fresh_svar patt_ind_gen_body)] $
patt_free_svar
(fresh_svar patt_ind_gen_body))
x β witnessed_elements_old
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M Hx: x
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu base)^[svar:0β¦
patt_free_svar (fresh_svar patt_ind_gen_body)]
βͺ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
((nest_mu step)^[svar:0β¦
patt_free_svar
(fresh_svar patt_ind_gen_body)] $
patt_free_svar
(fresh_svar patt_ind_gen_body))
x β witnessed_elements_old
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M Hx: x
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu base)^{svar:0β¦
fresh_svar patt_ind_gen_body}
βͺ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
((nest_mu step)^[svar:0β¦
patt_free_svar
(fresh_svar patt_ind_gen_body)] $
patt_free_svar
(fresh_svar patt_ind_gen_body))
x β witnessed_elements_old
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M Hx: x
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu base)^{svar:0β¦
fresh_svar patt_ind_gen_body}
βͺ eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
((nest_mu step)^{svar:0β¦
fresh_svar patt_ind_gen_body} $
patt_free_svar
(fresh_svar patt_ind_gen_body))
x β witnessed_elements_old
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu base)^{svar:0β¦
fresh_svar patt_ind_gen_body}
x β witnessed_elements_old
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
((nest_mu step)^{svar:0β¦
fresh_svar patt_ind_gen_body} $
patt_free_svar (fresh_svar patt_ind_gen_body))
x β witnessed_elements_old
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu base)^{svar:0β¦
fresh_svar patt_ind_gen_body}
x β witnessed_elements_old
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu base)^{svar:0β¦
fresh_svar patt_ind_gen_body}
x β witnessed_elements_old
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu base)^{svar:0β¦
fresh_svar patt_ind_gen_body}
x
β {[ m | βl : list M, is_witnessing_sequence_old m l ]}
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu base)^{svar:0β¦
fresh_svar patt_ind_gen_body}
is_witnessing_sequence_old x [x]
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu base)^{svar:0β¦
fresh_svar patt_ind_gen_body}
last [x] = Some x
β§ x β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [x] [])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu base)^{svar:0β¦
fresh_svar patt_ind_gen_body}
Some x = Some x
β§ x β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu base)^{svar:0β¦
fresh_svar patt_ind_gen_body}
Some x = Some x
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu base)^{svar:0β¦
fresh_svar patt_ind_gen_body}
x β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu base)^{svar:0β¦
fresh_svar patt_ind_gen_body}
Some x = Some x
reflexivity.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu base)^{svar:0β¦
fresh_svar patt_ind_gen_body}
x β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu base)^{svar:0β¦
fresh_svar patt_ind_gen_body}
x β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu base)^{svar:0β¦
fresh_svar patt_ind_gen_body}
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) []
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu base)^{svar:0β¦
fresh_svar patt_ind_gen_body}
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) []
constructor.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu base)^{svar:0β¦
fresh_svar patt_ind_gen_body}
x β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x
β eval Ο
(nest_mu base)^{svar:0β¦
fresh_svar patt_ind_gen_body}
x β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x
β eval Ο
(nest_mu base)^{svar:0β¦
fresh_svar patt_ind_gen_body}
x β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x
β eval Ο
(nest_mu base)^{svar:0β¦
fresh_svar patt_ind_gen_body}
x β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x
β eval Ο
(nest_mu base)^[svar:0β¦
patt_free_svar (fresh_svar patt_ind_gen_body)]
x β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x β eval Ο base
x β eval Ο base
auto.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
((nest_mu step)^{svar:0β¦
fresh_svar patt_ind_gen_body} $
patt_free_svar (fresh_svar patt_ind_gen_body))
x β witnessed_elements_old
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
((nest_mu step)^{svar:0β¦
fresh_svar patt_ind_gen_body} $
patt_free_svar (fresh_svar patt_ind_gen_body))
x β witnessed_elements_old
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x
β app_ext
(eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu step)^{svar:0β¦
fresh_svar patt_ind_gen_body})
(eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(patt_free_svar
(fresh_svar patt_ind_gen_body)))
x β witnessed_elements_old
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x
β app_ext
(eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu step)^{svar:0β¦
fresh_svar patt_ind_gen_body})
(svar_valuation
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(fresh_svar patt_ind_gen_body))
x β witnessed_elements_old
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x
β app_ext
(eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu step)^{svar:0β¦
fresh_svar patt_ind_gen_body})
witnessed_elements_old
x β witnessed_elements_old
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x
β {[ e | βlere : M,
le
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu step)^{svar:0β¦
fresh_svar patt_ind_gen_body}
β§ re β witnessed_elements_old
β§ e β app_interp M le re ]}
x β witnessed_elements_old
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x, step', m: M H1: step'
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu step)^{svar:0β¦
fresh_svar patt_ind_gen_body} H2: m β witnessed_elements_old Happ: x β app_interp M step' m
x β witnessed_elements_old
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x, step', m: M H1: step'
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu step)^{svar:0β¦
fresh_svar patt_ind_gen_body} H2: m
β {[ m | βl : list M,
is_witnessing_sequence_old m l ]} Happ: x β app_interp M step' m
x β witnessed_elements_old
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x, step', m: M H1: step'
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu step)^{svar:0β¦
fresh_svar patt_ind_gen_body} l: list M Hl: is_witnessing_sequence_old m l Happ: x β app_interp M step' m
x β witnessed_elements_old
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x, step', m: M H1: step'
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu step)^{svar:0β¦
fresh_svar patt_ind_gen_body} l: list M Hl: is_witnessing_sequence_old m l Happ: x β app_interp M step' m
x
β {[ m | βl : list M, is_witnessing_sequence_old m l ]}
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x, step', m: M H1: step'
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu step)^{svar:0β¦
fresh_svar patt_ind_gen_body} l: list M Hl: is_witnessing_sequence_old m l Happ: x β app_interp M step' m
is_witnessing_sequence_old x (l ++ [x])
(* `l` is not empty *)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x, step', m: M H1: step'
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu step)^{svar:0β¦
fresh_svar patt_ind_gen_body} l: list M Heql: l = [] Hl: is_witnessing_sequence_old m [] Happ: x β app_interp M step' m
is_witnessing_sequence_old x ([] ++ [x])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x, step', m: M H1: step'
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu step)^{svar:0β¦
fresh_svar patt_ind_gen_body} l: list M mβ: M l': list M Heql: l = mβ :: l' Hl: is_witnessing_sequence_old m (mβ :: l') Happ: x β app_interp M step' m
is_witnessing_sequence_old x ((mβ :: l') ++ [x])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x, step', m: M H1: step'
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu step)^{svar:0β¦
fresh_svar patt_ind_gen_body} l: list M Heql: l = [] Hl: is_witnessing_sequence_old m [] Happ: x β app_interp M step' m
is_witnessing_sequence_old x ([] ++ [x])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x, step', m: M H1: step'
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu step)^{svar:0β¦
fresh_svar patt_ind_gen_body} l: list M Heql: l = [] Hl: is_witnessing_sequence_old m [] Happ: x β app_interp M step' m
is_witnessing_sequence_old x ([] ++ [x])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x, step', m: M H1: step'
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu step)^{svar:0β¦
fresh_svar patt_ind_gen_body} l: list M Heql: l = [] H: last [] = Some m H0: False Happ: x β app_interp M step' m
is_witnessing_sequence_old x ([] ++ [x])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x, step', m: M H1: step'
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu step)^{svar:0β¦
fresh_svar patt_ind_gen_body} l: list M Heql: l = [] H: None = Some m H0: False Happ: x β app_interp M step' m
is_witnessing_sequence_old x ([] ++ [x])
inversion H.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x, step', m: M H1: step'
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu step)^{svar:0β¦
fresh_svar patt_ind_gen_body} l: list M mβ: M l': list M Heql: l = mβ :: l' Hl: is_witnessing_sequence_old m (mβ :: l') Happ: x β app_interp M step' m
is_witnessing_sequence_old x ((mβ :: l') ++ [x])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x, step', m: M H1: step'
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο)
(nest_mu step)^[svar:0β¦
patt_free_svar (fresh_svar patt_ind_gen_body)] l: list M mβ: M l': list M Heql: l = mβ :: l' Hl: is_witnessing_sequence_old m (mβ :: l') Happ: x β app_interp M step' m
is_witnessing_sequence_old x ((mβ :: l') ++ [x])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x, step', m: M l: list M mβ: M l': list M Heql: l = mβ :: l' Hl: is_witnessing_sequence_old m (mβ :: l') Happ: x β app_interp M step' m H1: step'
β eval
(update_svar_val
(fresh_svar patt_ind_gen_body)
witnessed_elements_old Ο) step
is_witnessing_sequence_old x ((mβ :: l') ++ [x])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x, step', m: M l: list M mβ: M l': list M Heql: l = mβ :: l' Hl: is_witnessing_sequence_old m (mβ :: l') Happ: x β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x, step', m: M l: list M mβ: M l': list M Heql: l = mβ :: l' Hl: is_witnessing_sequence_old m (mβ :: l') Happ: x β app_interp M step' m H1: step' β eval Ο step
is_witnessing_sequence_old x ((mβ :: l') ++ [x])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x, step', m: M l: list M mβ: M l': list M Heql: l = mβ :: l' Hl: is_witnessing_sequence_old m (mβ :: l') Happ: x β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x, step', m: M l: list M mβ: M l': list M Heql: l = mβ :: l' Hl: is_witnessing_sequence_old m (mβ :: l') Happ: x β app_interp M step' m
free_svars step β free_svars ?Οβ
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x, step', m: M l: list M mβ: M l': list M Heql: l = mβ :: l' Hl: is_witnessing_sequence_old m (mβ :: l') Happ: x β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x, step', m: M l: list M mβ: M l': list M Heql: l = mβ :: l' Hl: is_witnessing_sequence_old m (mβ :: l') Happ: x β app_interp M step' m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x, step', m: M l: list M mβ: M l': list M Heql: l = mβ :: l' Hl: is_witnessing_sequence_old m (mβ :: l') Happ: x β app_interp M step' m
free_svars step β free_svars patt_ind_gen_body
solve_free_svars_inclusion 2.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x, step', m: M l: list M mβ: M l': list M Heql: l = mβ :: l' Hl: is_witnessing_sequence_old m (mβ :: l') Happ: x β app_interp M step' m H1: step' β eval Ο step
is_witnessing_sequence_old x ((mβ :: l') ++ [x])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x, step', m: M l: list M mβ: M l': list M Heql: l = mβ :: l' Hl: is_witnessing_sequence_old m (mβ :: l') Happ: x β app_interp M step' m H1: step' β eval Ο step P: is_witnessing_sequence_old ?m (?x :: ?l)
β§ (βstep'0 : M,
step'0 β eval Ο step
β§ ?m' β app_interp M step'0 ?m)
β last (?x :: ?l) = Some ?m
β§ is_witnessing_sequence_old
?m' ((?x :: ?l) ++ [?m'])
is_witnessing_sequence_old x ((mβ :: l') ++ [x])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x, step', m: M l: list M mβ: M l': list M Heql: l = mβ :: l' Hl: is_witnessing_sequence_old m (mβ :: l') Happ: x β app_interp M step' m H1: step' β eval Ο step P: is_witnessing_sequence_old ?m (?x :: ?l)
β§ (βstep'0 : M,
step'0 β eval Ο step
β§ ?m' β app_interp M step'0 ?m)
β last (?x :: ?l) = Some ?m
β§ is_witnessing_sequence_old
?m' ((?x :: ?l) ++ [?m'])
is_witnessing_sequence_old x ((mβ :: l') ++ [x])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x, step', m: M l: list M mβ: M l': list M Heql: l = mβ :: l' Hl: is_witnessing_sequence_old m (mβ :: l') Happ: x β app_interp M step' m H1: step' β eval Ο step P: last (mβ :: l') = Some m
β§ is_witnessing_sequence_old x ((mβ :: l') ++ [x])
is_witnessing_sequence_old x ((mβ :: l') ++ [x])
apply P.Qed.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M
eval Ο patt_ind_gen β witnessed_elements_old
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M
eval Ο patt_ind_gen β witnessed_elements_old
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M
well_formed_positive (mu , patt_ind_gen_body)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M
letSfix := eval Ο patt_ind_gen in F Sfix = Sfix
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M
letSfix := eval Ο patt_ind_gen in F Sfix = Sfix
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M
well_formed_positive (mu , patt_ind_gen_body)
apply patt_ind_gen_wfp.Qed.Definitionwitnessed_elements_old_of_max_lenlen : propset (Domain M) :=
PropSet (Ξ»m, βl, is_witnessing_sequence_old m l /\ length l <= len).
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat
witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat
witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M
m β witnessed_elements_old_of_max_len 1
β m β eval Ο patt_ind_gen
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M
m β witnessed_elements_old_of_max_len 1
β m β F (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M
m β witnessed_elements_old_of_max_len 1
β m β F (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M H: m β witnessed_elements_old_of_max_len 1
m β F (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M H: m β witnessed_elements_old_of_max_len 1
m β F (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M H: m β witnessed_elements_old_of_max_len 1
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Hwit: is_witnessing_sequence_old m l Hlen: length l β€ 1
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Hwit: is_witnessing_sequence_old m l Hlen: length l β€ 1
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M Hlast: last l = Some m Hm: match l with
| [] => False
| mβ :: ms =>
mβ β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (mβ :: ms) ms)
end Hlen: length l β€ 1
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M Hlast: last [] = Some m Hm: False Hlen: length [] β€ 1
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, d: M l: list M Hlast: last (d :: l) = Some m Hm: d β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: l) l) Hlen: length (d :: l) β€ 1
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M Hlast: last [] = Some m Hm: False Hlen: length [] β€ 1
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M Hlast: None = Some m Hm: False Hlen: length [] β€ 1
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
inversion Hlast.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, d: M l: list M Hlast: last (d :: l) = Some m Hm: d β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: l) l) Hlen: length (d :: l) β€ 1
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, d: M Hlast: last [d] = Some m Hm: d β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [d] []) Hlen: length [d] β€ 1
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, d, d0: M l: list M Hlast: last (d :: d0 :: l) = Some m Hm: d β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: d0 :: l) (d0 :: l)) Hlen: length (d :: d0 :: l) β€ 1
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, d, d0: M l: list M Hlast: last (d :: d0 :: l) = Some m Hm: d β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: d0 :: l) (d0 :: l)) Hlen: length (d :: d0 :: l) β€ 1
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, d, d0: M l: list M Hlast: last (d :: d0 :: l) = Some m Hm: d β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: d0 :: l) (d0 :: l)) Hlen: S (S (length l)) β€ 1
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
lia.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, d: M Hlast: last [d] = Some m Hm: d β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [d] []) Hlen: length [d] β€ 1
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, d: M Hlast: Some d = Some m Hm: d β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [d] []) Hlen: length [d] β€ 1
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, d: M Hlast: Some d = Some m Hm: d β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [d] []) Hlen: length [d] β€ 1 H0: d = m
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m, d: M Hm: d β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [d] []) Hlen: length [d] β€ 1 H0: d = m
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M Hlen: length [m] β€ 1 Hm: m β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [m] [])
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M Hlen: length [m] β€ 1 Hm: m β eval Ο base
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M Hlen: length [m] β€ 1 Hm: m β eval Ο base
m β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M Hlen: length [m] β€ 1 Hm: m β eval Ο base
m β eval Ο base
apply Hm.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen
witnessed_elements_old_of_max_len (S (S len))
β eval Ο patt_ind_gen
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen
witnessed_elements_old_of_max_len (S (S len))
β eval Ο patt_ind_gen
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m: M
m β witnessed_elements_old_of_max_len (S (S len))
β m β eval Ο patt_ind_gen
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m: M
m β witnessed_elements_old_of_max_len (S (S len))
β m β F (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m: M
m β witnessed_elements_old_of_max_len (S (S len))
β m β F (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m: M H: m β witnessed_elements_old_of_max_len (S (S len))
m β F (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m: M l: list M Hwit: is_witnessing_sequence_old m l Hlen: length l β€ S (S len)
m β F (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m: M l: list M Hwit: is_witnessing_sequence_old m l Hlen: length l β€ S (S len)
m β F (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m: M l: list M Hwit: is_witnessing_sequence_old m l Hlen: length l β€ S (S len)
m β F (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m: M l: list M Hwit: is_witnessing_sequence_old m l Hlen: length l β€ S (S len)
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m: M l: list M Hwit: is_witnessing_sequence_old m l Hlen: length l β€ S (S len) Hwit': is_witnessing_sequence_old m l
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m: M l: list M Hwit: is_witnessing_sequence_old m l Hlen: length l β€ S (S len) Hwit': is_witnessing_sequence_old m l
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m: M l: list M Hlast: last l = Some m Hl: match l with
| [] => False
| mβ :: ms =>
mβ β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (mβ :: ms) ms)
end Hlen: length l β€ S (S len) Hwit': is_witnessing_sequence_old m l
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m: M Hlast: last [] = Some m Hl: False Hlen: length [] β€ S (S len) Hwit': is_witnessing_sequence_old m []
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M l: list M Hlast: last (d :: l) = Some m Hl: d β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: l) l) Hlen: length (d :: l) β€ S (S len) Hwit': is_witnessing_sequence_old m (d :: l)
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m: M Hlast: last [] = Some m Hl: False Hlen: length [] β€ S (S len) Hwit': is_witnessing_sequence_old m []
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
contradiction.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M l: list M Hlast: last (d :: l) = Some m Hl: d β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: l) l) Hlen: length (d :: l) β€ S (S len) Hwit': is_witnessing_sequence_old m (d :: l)
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M l: list M Hlast: last (d :: l) = Some m Hl: d β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: l) l) Hlen: S (length l) β€ S (S len) Hwit': is_witnessing_sequence_old m (d :: l)
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M l: list M Hlast: last (d :: l) = Some m Hd: d β eval Ο base Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: l) l) Hlen: S (length l) β€ S (S len) Hwit': is_witnessing_sequence_old m (d :: l)
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: last [d] = Some m Hd: d β eval Ο base Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [d] []) Hlen: S (length []) β€ S (S len) Hwit': is_witnessing_sequence_old m [d]
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0: M l: list M Hlast: last (d :: d0 :: l) = Some m Hd: d β eval Ο base Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: d0 :: l) (d0 :: l)) Hlen: S (length (d0 :: l)) β€ S (S len) Hwit': is_witnessing_sequence_old m (d :: d0 :: l)
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: last [d] = Some m Hd: d β eval Ο base Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [d] []) Hlen: S (length []) β€ S (S len) Hwit': is_witnessing_sequence_old m [d]
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some d = Some m Hd: d β eval Ο base Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [d] []) Hlen: S (length []) β€ S (S len) Hwit': is_witnessing_sequence_old m [d]
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some d = Some m Hd: d β eval Ο base Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [d] []) Hlen: S (length []) β€ S (S len) Hwit': is_witnessing_sequence_old m [d] H0: d = m
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hd: d β eval Ο base Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [d] []) Hlen: S (length []) β€ S (S len) Hwit': is_witnessing_sequence_old m [d] H0: d = m
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m: M Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [m] []) Hd: m β eval Ο base Hlen: S (length []) β€ S (S len) Hwit': is_witnessing_sequence_old m [m]
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m: M Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [m] []) Hd: m β eval Ο base Hlen: S (length []) β€ S (S len) Hwit': is_witnessing_sequence_old m [m]
m β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m: M Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [m] []) Hd: m β eval Ο base Hlen: S (length []) β€ S (S len) Hwit': is_witnessing_sequence_old m [m]
m β eval Ο base
apply Hd.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0: M l: list M Hlast: last (d :: d0 :: l) = Some m Hd: d β eval Ο base Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: d0 :: l) (d0 :: l)) Hlen: S (length (d0 :: l)) β€ S (S len) Hwit': is_witnessing_sequence_old m (d :: d0 :: l)
m
β eval Ο base
βͺ app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0: M l: list M Hlast: last (d :: d0 :: l) = Some m Hd: d β eval Ο base Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: d0 :: l) (d0 :: l)) Hlen: S (length (d0 :: l)) β€ S (S len) Hwit': is_witnessing_sequence_old m (d :: d0 :: l)
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0: M l: list M Hlast: last (d :: d0 :: l) = Some m Hd: d β eval Ο base Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: d0 :: l) (d0 :: l)) Hlen: S (length (d0 :: l)) β€ S (S len) Hwit': is_witnessing_sequence_old m (d :: d0 :: l)
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0: M l: list M Hlast: last (d :: d0 :: l) = Some m Hd: d β eval Ο base Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: d0 :: l) (d0 :: l)) Hlen: S (length (d0 :: l)) β€ S (S len) Hwit': is_witnessing_sequence_old m (d :: d0 :: l) P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
((x :: l) ++ [m'])
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0: M Hlast: last [d; d0] = Some m Hd: d β eval Ο base Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [d; d0] [d0]) Hlen: S (length [d0]) β€ S (S len) Hwit': is_witnessing_sequence_old m [d; d0] P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
((x :: l) ++ [m'])
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (d :: d0 :: x' :: l') = Some m Hd: d β eval Ο base Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: d0 :: x' :: l') (d0 :: x' :: l')) Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
((x :: l) ++ [m'])
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0: M Hlast: last [d; d0] = Some m Hd: d β eval Ο base Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [d; d0] [d0]) Hlen: S (length [d0]) β€ S (S len) Hwit': is_witnessing_sequence_old m [d; d0] P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
((x :: l) ++ [m'])
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0: M Hlast: Some d0 = Some m Hd: d β eval Ο base Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [d; d0] [d0]) Hlen: S (length [d0]) β€ S (S len) Hwit': is_witnessing_sequence_old m [d; d0] P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
((x :: l) ++ [m'])
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0: M Hlast: Some d0 = Some m Hd: d β eval Ο base Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [d; d0] [d0]) Hlen: S (length [d0]) β€ S (S len) Hwit': is_witnessing_sequence_old m [d; d0] P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
((x :: l) ++ [m']) H0: d0 = m
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [d; m] [m]) P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
((x :: l) ++ [m'])
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [d; m] [m]) P: is_witnessing_sequence_old d [d]
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' d)
β last [d] = Some d
β§ is_witnessing_sequence_old m ([d] ++ [m])
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [d; m] [m]) P: last [d] = Some d
β§ is_witnessing_sequence_old m ([d] ++ [m])
β is_witnessing_sequence_old d [d]
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' d)
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [d; m] [m]) P: Some d = Some d
β§ is_witnessing_sequence_old m [d; m]
β is_witnessing_sequence_old d [d]
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' d)
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
[(d, m)] P: Some d = Some d
β§ is_witnessing_sequence_old m [d; m]
β is_witnessing_sequence_old d [d]
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' d)
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
[(d, m)] P: Some d = Some d
β§ is_witnessing_sequence_old m [d; m]
β is_witnessing_sequence_old d [d]
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' d) x: (M * M)%type l: list (M * M) H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] H: x = (d, m) H0: l = []
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
[(d, m)] P: Some d = Some d
β§ is_witnessing_sequence_old m [d; m]
β is_witnessing_sequence_old d [d]
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' d) H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) []
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) P: Some d = Some d
β§ is_witnessing_sequence_old m [d; m]
β is_witnessing_sequence_old d [d]
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' d) H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) []
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) P: Some d = Some d
β§ is_witnessing_sequence_old m [d; m]
β is_witnessing_sequence_old d [d]
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' d) H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) []
Some d = Some d
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) P: Some d = Some d
β§ is_witnessing_sequence_old m [d; m]
β is_witnessing_sequence_old d [d]
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' d) H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) P: Some d = Some d
β§ is_witnessing_sequence_old m [d; m]
β is_witnessing_sequence_old d [d]
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' d) H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) []
Some d = Some d
reflexivity.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) P: Some d = Some d
β§ is_witnessing_sequence_old m [d; m]
β is_witnessing_sequence_old d [d]
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' d) H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) P: is_witnessing_sequence_old d [d]
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' d) H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step
β§ m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step
β§ m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
βre : M,
step' β eval Ο step
β§ re β eval Ο patt_ind_gen
β§ m β app_interp M step' re
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step
β§ m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
step' β eval Ο step
β§ d β eval Ο patt_ind_gen β§ m β app_interp M step' d
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
step' β eval Ο step
β§ d β eval Ο patt_ind_gen β§ m β app_interp M step' d
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
step' β eval Ο step
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
d β eval Ο patt_ind_gen β§ m β app_interp M step' d
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
step' β eval Ο step
apply Hstep'.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
d β eval Ο patt_ind_gen β§ m β app_interp M step' d
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
d β eval Ο patt_ind_gen
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
m β app_interp M step' d
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
d β eval Ο patt_ind_gen
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
d β witnessed_elements_old_of_max_len (S len)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
d
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
is_witnessing_sequence_old d [d] β§ length [d] β€ S len
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
is_witnessing_sequence_old d [d]
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
length [d] β€ S len
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
length [d] β€ S len
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
1 β€ S len
lia.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
is_witnessing_sequence_old d [d]
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
is_witnessing_sequence_old d [d]
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
is_witnessing_sequence_old d [d]
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
last [d] = Some d
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
d β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [d] [])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
last [d] = Some d
reflexivity.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
d β eval Ο base
β§ Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [d] [])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
d β eval Ο base
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip [d] [])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
d β eval Ο base
apply Hd.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) (zip [d] [])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
True
exact I.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d: M Hlast: Some m = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; m] Hlen: S (length [m]) β€ S (S len) Hwitd: is_witnessing_sequence_old d [d] step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' d H1: m β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]}) [] Hsomed: Some d = Some d
m β app_interp M step' d
apply Hm.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (d :: d0 :: x' :: l') = Some m Hd: d β eval Ο base Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: d0 :: x' :: l') (d0 :: x' :: l')) Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
((x :: l) ++ [m'])
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (d :: d0 :: x' :: l') = Some m Hd: d β eval Ο base Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: d0 :: x' :: l') (d0 :: x' :: l')) Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
(x :: l ++ [m'])
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
(zip (d :: d0 :: x' :: l') (d0 :: x' :: l')) Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
(x :: l ++ [m'])
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((d, d0)
:: (d0, x')
:: match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end) Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
(x :: l ++ [m'])
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((d, d0)
:: (d0, x')
:: match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end) Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
(x :: l ++ [m']) x: (M * M)%type l: list (M * M) H1: d0 β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((d0, x')
:: match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end) H: x = (d, d0) H0: l =
(d0, x')
:: match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hl: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((d, d0)
:: (d0, x')
:: match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end) Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((d0, x')
:: match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end)
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((d0, x')
:: match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end)
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((d0, x')
:: match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end) x: (M * M)%type l: list (M * M) H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end H: x = (d0, x') H0: l =
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 β app_ext (eval Ο step) {[d]} H2: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
((d0, x')
:: match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end) H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= rev (d0 :: x' :: l') !! 1: option M
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Htot: rev (d0 :: x' :: l') !! 1 =
Some (rev (d0 :: x' :: l') !!! 1)
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Htot: rev (d0 :: x' :: l') !! 1 =
Some (rev (d0 :: x' :: l') !!! 1)
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Inhabited M
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
1 < length (rev (d0 :: x' :: l'))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
Inhabited M
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
M
exact d0.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Htot: rev (d0 :: x' :: l') !! 1 =
Some (rev (d0 :: x' :: l') !!! 1)
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
1 < length (rev (d0 :: x' :: l'))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
1 < length (rev (d0 :: x' :: l'))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
1 < length ((rev l' ++ [x']) ++ [d0])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
1 < length (rev l' ++ [x']) + length [d0]
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
1 < length (rev l') + length [x'] + length [d0]
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M
1 < length (rev l') + 1 + 1
lia.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Htot: rev (d0 :: x' :: l') !! 1 =
Some (rev (d0 :: x' :: l') !!! 1)
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat IHlen: witnessed_elements_old_of_max_len (S len)
β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M mprev: M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β witnessed_elements_old_of_max_len (S len)
β mprev β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: β (mxm' : M) (l : list M),
is_witnessing_sequence_old m (x :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m' β app_interp M step' m)
β last (x :: l) = Some m
β§ is_witnessing_sequence_old m'
(x :: l ++ [m']) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: is_witnessing_sequence_old mprev
(d :: rev (tail (rev (d0 :: x' :: l'))))
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev)
β last (d :: rev (tail (rev (d0 :: x' :: l')))) =
Some mprev
β§ is_witnessing_sequence_old m
(d
:: rev (tail (rev (d0 :: x' :: l'))) ++ [m]) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: is_witnessing_sequence_old mprev
(d :: rev (tail (rev (d0 :: x' :: l'))))
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev)
β last (d :: rev (tail (rev (d0 :: x' :: l')))) =
Some mprev
β§ is_witnessing_sequence_old m
(d
:: rev (tail (rev (d0 :: x' :: l'))) ++ [m]) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
d :: d0 :: x' :: l' =
d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m]
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: is_witnessing_sequence_old mprev
(d :: rev (tail (rev (d0 :: x' :: l'))))
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev)
β last (d :: rev (tail (rev (d0 :: x' :: l')))) =
Some mprev
β§ is_witnessing_sequence_old m
(d
:: rev (tail (rev (d0 :: x' :: l'))) ++ [m]) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Heq1: d :: d0 :: x' :: l' =
d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m]
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: is_witnessing_sequence_old mprev
(d :: rev (tail (rev (d0 :: x' :: l'))))
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev)
β last (d :: rev (tail (rev (d0 :: x' :: l')))) =
Some mprev
β§ is_witnessing_sequence_old m
(d
:: rev (tail (rev (d0 :: x' :: l'))) ++ [m]) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
d :: d0 :: x' :: l' =
d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m]
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: is_witnessing_sequence_old mprev
(d :: rev (tail (rev (d0 :: x' :: l'))))
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev)
β last (d :: rev (tail (rev (d0 :: x' :: l')))) =
Some mprev
β§ is_witnessing_sequence_old m
(d
:: rev (tail (rev (d0 :: x' :: l'))) ++ [m]) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: is_witnessing_sequence_old mprev
(d :: rev (tail (rev (d0 :: x' :: l'))))
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev)
β last (d :: rev (tail (rev (d0 :: x' :: l')))) =
Some mprev
β§ is_witnessing_sequence_old m
(d
:: rev (tail (rev (d0 :: x' :: l'))) ++ [m]) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Hx'r: [x'] = rev [x'] Hd0r: [d0] = rev [d0]
last ([d0] ++ [x'] ++ l') = Some m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: is_witnessing_sequence_old mprev
(d :: rev (tail (rev (d0 :: x' :: l'))))
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev)
β last (d :: rev (tail (rev (d0 :: x' :: l')))) =
Some mprev
β§ is_witnessing_sequence_old m
(d
:: rev (tail (rev (d0 :: x' :: l'))) ++ [m]) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Hx'r: [x'] = rev [x'] Hd0r: [d0] = rev [d0]
d0 :: x' :: l' = [d0] ++ [x'] ++ l'
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: is_witnessing_sequence_old mprev
(d :: rev (tail (rev (d0 :: x' :: l'))))
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev)
β last (d :: rev (tail (rev (d0 :: x' :: l')))) =
Some mprev
β§ is_witnessing_sequence_old m
(d
:: rev (tail (rev (d0 :: x' :: l'))) ++ [m]) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Hx'r: [x'] = rev [x'] Hd0r: [d0] = rev [d0]
last (x' :: l') = Some m
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: is_witnessing_sequence_old mprev
(d :: rev (tail (rev (d0 :: x' :: l'))))
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev)
β last (d :: rev (tail (rev (d0 :: x' :: l')))) =
Some mprev
β§ is_witnessing_sequence_old m
(d
:: rev (tail (rev (d0 :: x' :: l'))) ++ [m]) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Hx'r: [x'] = rev [x'] Hd0r: [d0] = rev [d0]
d0 :: x' :: l' = [d0] ++ [x'] ++ l'
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: is_witnessing_sequence_old mprev
(d :: rev (tail (rev (d0 :: x' :: l'))))
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev)
β last (d :: rev (tail (rev (d0 :: x' :: l')))) =
Some mprev
β§ is_witnessing_sequence_old m
(d
:: rev (tail (rev (d0 :: x' :: l'))) ++ [m]) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Hx'r: [x'] = rev [x'] Hd0r: [d0] = rev [d0]
d0 :: x' :: l' = [d0] ++ [x'] ++ l'
reflexivity.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: is_witnessing_sequence_old mprev
(d :: rev (tail (rev (d0 :: x' :: l'))))
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev)
β last (d :: rev (tail (rev (d0 :: x' :: l')))) =
Some mprev
β§ is_witnessing_sequence_old m
(d
:: rev (tail (rev (d0 :: x' :: l'))) ++ [m]) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Heq1: d :: d0 :: x' :: l' =
d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m]
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: last (d :: rev (tail (rev (d0 :: x' :: l')))) =
Some mprev
β§ is_witnessing_sequence_old m
(d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m])
β is_witnessing_sequence_old mprev
(d :: rev (tail (rev (d0 :: x' :: l'))))
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Heq1: d :: d0 :: x' :: l' =
d :: rev (tail (rev (d0 :: x' :: l'))) ++ [m]
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') Heqrev: rev (tail (rev (d0 :: x' :: l'))) = [] P: last [d] = Some mprev
β§ is_witnessing_sequence_old m (d :: [] ++ [m])
β is_witnessing_sequence_old mprev [d]
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Heq1: d :: d0 :: x' :: l' = d :: [] ++ [m]
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') d1: M l: list M Heqrev: rev (tail (rev (d0 :: x' :: l'))) = d1 :: l P: last (d :: d1 :: l) = Some mprev
β§ is_witnessing_sequence_old m
(d :: (d1 :: l) ++ [m])
β is_witnessing_sequence_old mprev (d :: d1 :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Heq1: d :: d0 :: x' :: l' = d :: (d1 :: l) ++ [m]
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') Heqrev: rev (tail (rev (d0 :: x' :: l'))) = [] P: last [d] = Some mprev
β§ is_witnessing_sequence_old m (d :: [] ++ [m])
β is_witnessing_sequence_old mprev [d]
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Heq1: d :: d0 :: x' :: l' = d :: [] ++ [m]
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') Heqrev: length (rev (tail (rev (d0 :: x' :: l')))) =
0 P: last [d] = Some mprev
β§ is_witnessing_sequence_old m (d :: [] ++ [m])
β is_witnessing_sequence_old mprev [d]
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Heq1: d :: d0 :: x' :: l' = d :: [] ++ [m]
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: last [d] = Some mprev
β§ is_witnessing_sequence_old m (d :: [] ++ [m])
β is_witnessing_sequence_old mprev [d]
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Heq1: d :: d0 :: x' :: l' = d :: [] ++ [m] Heqrev: length (tail (rev (d0 :: x' :: l'))) = 0
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: last [d] = Some mprev
β§ is_witnessing_sequence_old m (d :: [] ++ [m])
β is_witnessing_sequence_old mprev [d]
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Heq1: d :: d0 :: x' :: l' = d :: [] ++ [m] Heqrev: length (rev (d0 :: x' :: l')) = 0
β¨ length (rev (d0 :: x' :: l')) = 1
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: last [d] = Some mprev
β§ is_witnessing_sequence_old m (d :: [] ++ [m])
β is_witnessing_sequence_old mprev [d]
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Heq1: d :: d0 :: x' :: l' = d :: [] ++ [m] Heqrev: length (d0 :: x' :: l') = 0
β¨ length (d0 :: x' :: l') = 1
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') P: last [d] = Some mprev
β§ is_witnessing_sequence_old m (d :: [] ++ [m])
β is_witnessing_sequence_old mprev [d]
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Heq1: d :: d0 :: x' :: l' = d :: [] ++ [m] Heqrev: S (S (length l')) = 0 β¨ S (S (length l')) = 1
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
lia.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') d1: M l: list M Heqrev: rev (tail (rev (d0 :: x' :: l'))) = d1 :: l P: last (d :: d1 :: l) = Some mprev
β§ is_witnessing_sequence_old m
(d :: (d1 :: l) ++ [m])
β is_witnessing_sequence_old mprev (d :: d1 :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Heq1: d :: d0 :: x' :: l' = d :: (d1 :: l) ++ [m]
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') d1: M l: list M Heqrev: rev (tail (rev (d0 :: x' :: l'))) = d1 :: l P: last (d :: d1 :: l) = Some mprev
β§ is_witnessing_sequence_old m
(d :: (d1 :: l) ++ [m])
β is_witnessing_sequence_old mprev (d :: d1 :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Heq1: d :: d0 :: x' :: l' = d :: d1 :: l ++ [m]
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base Hlen: S (length (d0 :: x' :: l')) β€ S (S len) Hwit': is_witnessing_sequence_old m
(d :: d0 :: x' :: l') d1: M l: list M Heqrev: rev (tail (rev (d0 :: x' :: l'))) = d1 :: l P: last (d :: d1 :: l) = Some mprev
β§ is_witnessing_sequence_old m
(d :: (d1 :: l) ++ [m])
β is_witnessing_sequence_old mprev (d :: d1 :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev) H1: d0 β app_ext (eval Ο step) {[d]} H3: x' β app_ext (eval Ο step) {[d0]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end mp:= ((rev l' ++ [x']) ++ [d0]) !! 1: option M Heqmprev: mprev = rev (d0 :: x' :: l') !!! 1 Htot: rev (d0 :: x' :: l') !! 1 = Some mprev Heq1: d :: d0 :: x' :: l' = d :: d1 :: l ++ [m] H0: d0 = d1 H2: x' :: l' = l ++ [m]
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l P: last (d :: d1 :: l) = Some mprev
β§ is_witnessing_sequence_old m
(d :: (d1 :: l) ++ [m])
β is_witnessing_sequence_old mprev (d :: d1 :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev) H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Heq1: d :: d1 :: x' :: l' = d :: d1 :: l ++ [m] Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m]
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l P: last (d :: d1 :: l) = Some mprev
β§ is_witnessing_sequence_old m
(d :: (d1 :: l) ++ [m])
β is_witnessing_sequence_old mprev (d :: d1 :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev) H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m]
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l P: last (d1 :: l) = Some mprev
β§ is_witnessing_sequence_old m
(d :: d1 :: l ++ [m])
β is_witnessing_sequence_old mprev (d :: d1 :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev) H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m]
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] P: last (d1 :: l) = Some mprev
β§ is_witnessing_sequence_old m
(d :: d1 :: x' :: l')
β is_witnessing_sequence_old mprev (d :: d1 :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev)
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] P: last (d1 :: l) = Some mprev
β§ is_witnessing_sequence_old m
(d :: d1 :: x' :: l')
β is_witnessing_sequence_old mprev (d :: d1 :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev)
match l with
| [] => Some d1
| _ :: _ => last l
end = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] P: last (d1 :: l) = Some mprev
β§ is_witnessing_sequence_old m
(d :: d1 :: x' :: l')
β is_witnessing_sequence_old mprev (d :: d1 :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev) Hm: match l with
| [] => Some d1
| _ :: _ => last l
end = Some mprev
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] P: last (d1 :: l) = Some mprev
β§ is_witnessing_sequence_old m
(d :: d1 :: x' :: l')
β is_witnessing_sequence_old mprev (d :: d1 :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev)
match l with
| [] => Some d1
| _ :: _ => last l
end = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) β€ S (S len) l: list M Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 H2: x' :: l' = l ++ [m]
match l with
| [] => Some d1
| _ :: _ => last l
end = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) β€ S (S len) Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 H2: x' :: l' = [] ++ [m]
Some d1 = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) β€ S (S len) d0: M l: list M Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 H2: x' :: l' = (d0 :: l) ++ [m]
last (d0 :: l) = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) β€ S (S len) Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 H2: x' :: l' = [] ++ [m]
Some d1 = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) β€ S (S len) Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 H2: x' :: l' = [m]
Some d1 = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) β€ S (S len) Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 H2: x' :: l' = [m] H0: x' = m H1: l' = []
Some d1 = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat d1, m: M IHlen: rev [d1; m] !!! 1
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β rev [d1; m] !!! 1 β eval Ο patt_ind_gen d: M Hlast: last [m] = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; d1; m] Hlen: S (length [d1; m]) β€ S (S len) Htot: rev [d1; m] !! 1 = Some (rev [d1; m] !!! 1) H2: [m] = [m]
Some d1 = Some (rev [d1; m] !!! 1)
reflexivity.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) β€ S (S len) d0: M l: list M Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 H2: x' :: l' = (d0 :: l) ++ [m]
last (d0 :: l) = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) β€ S (S len) d0: M l: list M Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 H2: x' :: l' = (d0 :: l) ++ [m]
last (d0 :: l) = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) β€ S (S len) d0: M l: list M Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 H2: x' :: l' = d0 :: l ++ [m]
last (d0 :: l) = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) β€ S (S len) d0: M l: list M Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 H2: x' :: l' = d0 :: l ++ [m] H0: x' = d0 H1: l' = l ++ [m]
last (d0 :: l) = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0: M l: list M d1: M Htot: rev (d1 :: d0 :: l ++ [m]) !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: d0 :: l ++ [m]) !!! 1 H2: d0 :: l ++ [m] = d0 :: l ++ [m] Hlast: last (d0 :: l ++ [m]) = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: l ++ [m]) Hlen: S (length (d1 :: d0 :: l ++ [m])) β€ S (S len)
last (d0 :: l) = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0: M l: list M d1: M Htot: rev (d1 :: d0 :: l ++ [m]) !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: d0 :: l ++ [m]) !!! 1 Hlast: last (d0 :: l ++ [m]) = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: l ++ [m]) Hlen: S (length (d1 :: d0 :: l ++ [m])) β€ S (S len)
last (d0 :: l) = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0: M l: list M d1: M Htot: ((rev (l ++ [m]) ++ [d0]) ++ [d1]) !! 1 =
Some mprev Heqmprev: mprev = rev (d1 :: d0 :: l ++ [m]) !!! 1 Hlast: last (d0 :: l ++ [m]) = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: l ++ [m]) Hlen: S (length (d1 :: d0 :: l ++ [m])) β€ S (S len)
last (d0 :: l) = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0: M l: list M d1: M Hcontra: l ++ [m] = [] Htot: ((rev [] ++ [d0]) ++ [d1]) !! 1 = Some mprev Heqmprev: mprev = rev [d1; d0] !!! 1 Hlast: last [d0] = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; d1; d0] Hlen: S (length [d1; d0]) β€ S (S len)
last (d0 :: l) = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0: M l: list M d1, d2: M l0: list M Hcontra: l ++ [m] = d2 :: l0 Htot: ((rev (d2 :: l0) ++ [d0]) ++ [d1]) !! 1 =
Some mprev Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) β€ S (S len)
last (d0 :: l) = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0: M l: list M d1: M Hcontra: l ++ [m] = [] Htot: ((rev [] ++ [d0]) ++ [d1]) !! 1 = Some mprev Heqmprev: mprev = rev [d1; d0] !!! 1 Hlast: last [d0] = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; d1; d0] Hlen: S (length [d1; d0]) β€ S (S len)
last (d0 :: l) = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0: M l: list M d1: M Hcontra: l ++ [m] = [] Htot: ((rev [] ++ [d0]) ++ [d1]) !! 1 = Some mprev Heqmprev: mprev = rev [d1; d0] !!! 1 Hlast: last [d0] = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; d1; d0] Hlen: S (length [d1; d0]) β€ S (S len) Hcontra': length (l ++ [m]) = length l + length [m]
last (d0 :: l) = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0: M l: list M d1: M Hcontra: l ++ [m] = [] Htot: ((rev [] ++ [d0]) ++ [d1]) !! 1 = Some mprev Heqmprev: mprev = rev [d1; d0] !!! 1 Hlast: last [d0] = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; d1; d0] Hlen: S (length [d1; d0]) β€ S (S len) Hcontra': length [] = length l + length [m]
last (d0 :: l) = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0: M l: list M d1: M Hcontra: l ++ [m] = [] Htot: ((rev [] ++ [d0]) ++ [d1]) !! 1 = Some mprev Heqmprev: mprev = rev [d1; d0] !!! 1 Hlast: last [d0] = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m [d; d1; d0] Hlen: S (length [d1; d0]) β€ S (S len) Hcontra': 0 = length l + 1
last (d0 :: l) = Some mprev
lia.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0: M l: list M d1, d2: M l0: list M Hcontra: l ++ [m] = d2 :: l0 Htot: ((rev (d2 :: l0) ++ [d0]) ++ [d1]) !! 1 =
Some mprev Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) β€ S (S len)
last (d0 :: l) = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0: M l: list M d1, d2: M l0: list M Hcontra: l ++ [m] = d2 :: l0 Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) β€ S (S len) Htot: ((rev (l ++ [m]) ++ [d0]) ++ [d1]) !! 1 =
Some mprev
last (d0 :: l) = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0: M l: list M d1, d2: M l0: list M Hcontra: l ++ [m] = d2 :: l0 Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) β€ S (S len) Htot: (((rev [m] ++ rev l) ++ [d0]) ++ [d1]) !! 1 =
Some mprev
last (d0 :: l) = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0: M l: list M d1, d2: M l0: list M Hcontra: l ++ [m] = d2 :: l0 Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) β€ S (S len) Htot: ((rev l ++ [d0]) ++ [d1]) !! 0 = Some mprev
last (d0 :: l) = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, d1, d2: M l0: list M Hcontra: [] ++ [m] = d2 :: l0 Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) β€ S (S len) Htot: ((rev [] ++ [d0]) ++ [d1]) !! 0 = Some mprev
last [d0] = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, d3: M l: list M d1, d2: M l0: list M Hcontra: (d3 :: l) ++ [m] = d2 :: l0 Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) β€ S (S len) Htot: ((rev (d3 :: l) ++ [d0]) ++ [d1]) !! 0 =
Some mprev
last (d0 :: d3 :: l) = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, d1, d2: M l0: list M Hcontra: [] ++ [m] = d2 :: l0 Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) β€ S (S len) Htot: ((rev [] ++ [d0]) ++ [d1]) !! 0 = Some mprev
last [d0] = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, d1, d2: M l0: list M Hcontra: [] ++ [m] = d2 :: l0 Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) β€ S (S len) Htot: Some d0 = Some mprev
last [d0] = Some mprev
apply Htot.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, d3: M l: list M d1, d2: M l0: list M Hcontra: (d3 :: l) ++ [m] = d2 :: l0 Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) β€ S (S len) Htot: ((rev (d3 :: l) ++ [d0]) ++ [d1]) !! 0 =
Some mprev
last (d0 :: d3 :: l) = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, d3: M l: list M d1, d2: M l0: list M Hcontra: (d3 :: l) ++ [m] = d2 :: l0 Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) β€ S (S len) Htot: (((rev l ++ [d3]) ++ [d0]) ++ [d1]) !! 0 =
Some mprev
last (d0 :: d3 :: l) = Some mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, d3: M l: list M d1, d2: M l0: list M Hcontra: (d3 :: l) ++ [m] = d2 :: l0 Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) β€ S (S len) Htot: (((rev l ++ [d3]) ++ [d0]) ++ [d1]) !! 0 =
Some mprev
last (d0 :: d3 :: l) =
(((rev l ++ [d3]) ++ [d0]) ++ [d1]) !! 0
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, d3: M l: list M d1, d2: M l0: list M Hcontra: (d3 :: l) ++ [m] = d2 :: l0 Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) β€ S (S len) Htot: (((rev l ++ [d3]) ++ [d0]) ++ [d1]) !! 0 =
Some mprev
last (d0 :: d3 :: l) =
head (((rev l ++ [d3]) ++ [d0]) ++ [d1])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, d3: M l: list M d1, d2: M l0: list M Hcontra: (d3 :: l) ++ [m] = d2 :: l0 Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) β€ S (S len) Htot: (((rev l ++ [d3]) ++ [d0]) ++ [d1]) !! 0 =
Some mprev
last (d0 :: d3 :: l) = head ((rev l ++ [d3]) ++ [d0])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, d3: M l: list M d1, d2: M l0: list M Hcontra: (d3 :: l) ++ [m] = d2 :: l0 Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) β€ S (S len) Htot: (((rev l ++ [d3]) ++ [d0]) ++ [d1]) !! 0 =
Some mprev
last (d0 :: d3 :: l) = head (rev l ++ [d3])
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, d0, d3: M l: list M d1, d2: M l0: list M Hcontra: (d3 :: l) ++ [m] = d2 :: l0 Heqmprev: mprev = rev (d1 :: d0 :: d2 :: l0) !!! 1 Hlast: last (d0 :: d2 :: l0) = Some m Hd: d β eval Ο base Hwit': is_witnessing_sequence_old m
(d :: d1 :: d0 :: d2 :: l0) Hlen: S (length (d1 :: d0 :: d2 :: l0)) β€ S (S len) Htot: (((rev l ++ [d3]) ++ [d0]) ++ [d1]) !! 0 =
Some mprev
last (d3 :: l) = head (rev l ++ [d3])
apply last_rev_head.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] P: last (d1 :: l) = Some mprev
β§ is_witnessing_sequence_old m
(d :: d1 :: x' :: l')
β is_witnessing_sequence_old mprev (d :: d1 :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev) Hm: match l with
| [] => Some d1
| _ :: _ => last l
end = Some mprev
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hwit': is_witnessing_sequence_old m
(d :: d1 :: x' :: l') Hlen: S (length (d1 :: x' :: l')) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] P: is_witnessing_sequence_old mprev (d :: d1 :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev) Hm: match l with
| [] => Some d1
| _ :: _ => last l
end = Some mprev
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hlen: S (length (d1 :: x' :: l')) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] P: is_witnessing_sequence_old mprev (d :: d1 :: l)
β§ (βstep' : M,
step' β eval Ο step
β§ m β app_interp M step' mprev)
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hlen: S (length (d1 :: x' :: l')) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' mprev
m β app_ext (eval Ο step) (eval Ο patt_ind_gen)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hlen: S (length (d1 :: x' :: l')) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' mprev
βre : M,
step' β eval Ο step
β§ re β eval Ο patt_ind_gen
β§ m β app_interp M step' re
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hlen: S (length (d1 :: x' :: l')) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' mprev
step' β eval Ο step
β§ mprev β eval Ο patt_ind_gen
β§ m β app_interp M step' mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hlen: S (length (d1 :: x' :: l')) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' mprev
step' β eval Ο step
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hlen: S (length (d1 :: x' :: l')) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' mprev
mprev β eval Ο patt_ind_gen
β§ m β app_interp M step' mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hlen: S (length (d1 :: x' :: l')) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' mprev
step' β eval Ο step
apply Hstep'.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hlen: S (length (d1 :: x' :: l')) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' mprev
mprev β eval Ο patt_ind_gen
β§ m β app_interp M step' mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hlen: S (length (d1 :: x' :: l')) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' mprev
mprev β eval Ο patt_ind_gen
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hlen: S (length (d1 :: x' :: l')) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' mprev
m β app_interp M step' mprev
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hlen: S (length (d1 :: x' :: l')) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' mprev
m β app_interp M step' mprev
apply Hm.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hlen: S (length (d1 :: x' :: l')) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' mprev
mprev β eval Ο patt_ind_gen
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hlen: S (length (d1 :: x' :: l')) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' mprev
mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hlen: S (length (d1 :: x' :: l')) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' mprev
is_witnessing_sequence_old mprev (d :: d1 :: l)
β§ length (d :: d1 :: l) β€ S len
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hlen: S (length (d1 :: x' :: l')) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' mprev
is_witnessing_sequence_old mprev (d :: d1 :: l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hlen: S (length (d1 :: x' :: l')) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' mprev
length (d :: d1 :: l) β€ S len
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hlen: S (length (d1 :: x' :: l')) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' mprev
is_witnessing_sequence_old mprev (d :: d1 :: l)
apply Hwitmprev.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hlen: S (length (d1 :: x' :: l')) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' mprev
length (d :: d1 :: l) β€ S len
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hlen: S (length (d1 :: x' :: l')) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' mprev
S (S (length l)) β€ S len
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hlen: S (S (S (length l'))) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' mprev
S (S (length l)) β€ S len
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hlen: S (S (S (length l'))) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' mprev
S (length l') β€ len
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hlen: S (S (S (length l'))) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' mprev Hlen': S (length l') β€ len
S (S (length l)) β€ S len
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hlen: S (S (S (length l'))) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' mprev
S (length l') β€ len
lia.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hlen: S (S (S (length l'))) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' mprev Hlen': S (length l') β€ len
S (S (length l)) β€ S len
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hlen: S (S (S (length l'))) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' mprev Hlen': S (length l') β€ len
length l' = length l
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hlen: S (S (S (length l'))) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' mprev Hlen': S (length l') β€ len H: length l' = length l
S (S (length l)) β€ S len
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hlen: S (S (S (length l'))) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' mprev Hlen': S (length l') β€ len
length l' = length l
apply (@list_len_slice _ _ _ _ _ H2).
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hlen: S (S (S (length l'))) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' mprev Hlen': S (length l') β€ len H: length l' = length l
S (S (length l)) β€ S len
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M len: nat mprev: M IHlen: mprev
β {[ m | βl : list M,
is_witnessing_sequence_old m l
β§ length l β€ S len ]}
β mprev β eval Ο patt_ind_gen m, d, x': M l': list M Hlast: last (x' :: l') = Some m Hd: d β eval Ο base d1: M Hlen: S (S (S (length l'))) β€ S (S len) l: list M Heqrev: rev (tail (rev (d1 :: x' :: l'))) = d1 :: l H3: x' β app_ext (eval Ο step) {[d1]} H1: d1 β app_ext (eval Ο step) {[d]} H4: Forall
(Ξ»x : M * M,
let (old, new) := x in
new β app_ext (eval Ο step) {[old]})
match l' with
| [] => []
| x2 :: l2 => (x', x2) :: zip l' l2
end Htot: rev (d1 :: x' :: l') !! 1 = Some mprev Heqmprev: mprev = rev (d1 :: x' :: l') !!! 1 mp:= ((rev l' ++ [x']) ++ [d1]) !! 1: option M H2: x' :: l' = l ++ [m] Hwitmprev: is_witnessing_sequence_old mprev
(d :: d1 :: l) step': M Hstep': step' β eval Ο step Hm: m β app_interp M step' mprev Hlen': S (length l') β€ len H: length l' = length l
S (S (length l')) β€ S len
lia.Qed.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M
witnessed_elements_old β eval Ο patt_ind_gen
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M
witnessed_elements_old β eval Ο patt_ind_gen
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x β witnessed_elements_old
x β eval Ο patt_ind_gen
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x β witnessed_elements_old
x β eval Ο patt_ind_gen
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M H: x
β {[ m | βl : list M,
is_witnessing_sequence_old m l ]}
x β eval Ο patt_ind_gen
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M wit: list M Hwit: is_witnessing_sequence_old x wit
x β eval Ο patt_ind_gen
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M wit: list M Hwit: is_witnessing_sequence_old x wit
x β witnessed_elements_old_of_max_len (length wit)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M wit: list M Hwit: is_witnessing_sequence_old x wit H': x
β witnessed_elements_old_of_max_len (length wit)
x β eval Ο patt_ind_gen
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M wit: list M Hwit: is_witnessing_sequence_old x wit
x β witnessed_elements_old_of_max_len (length wit)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M wit: list M Hwit: is_witnessing_sequence_old x wit
x β witnessed_elements_old_of_max_len (length wit)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M wit: list M Hwit: is_witnessing_sequence_old x wit
is_witnessing_sequence_old x wit
β§ length wit β€ length wit
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M wit: list M Hwit: is_witnessing_sequence_old x wit
is_witnessing_sequence_old x wit
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M wit: list M Hwit: is_witnessing_sequence_old x wit
length wit β€ length wit
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M wit: list M Hwit: is_witnessing_sequence_old x wit
length wit β€ length wit
lia.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M wit: list M Hwit: is_witnessing_sequence_old x wit H': x
β witnessed_elements_old_of_max_len (length wit)
x β eval Ο patt_ind_gen
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M wit: list M Hl: wit = [] Hwit: is_witnessing_sequence_old x [] H': x β witnessed_elements_old_of_max_len (length [])
x β eval Ο patt_ind_gen
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M wit: list M y: M l': list M Hl: wit = y :: l' Hwit: is_witnessing_sequence_old x (y :: l') H': x
β witnessed_elements_old_of_max_len
(length (y :: l'))
x β eval Ο patt_ind_gen
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M wit: list M Hl: wit = [] Hwit: is_witnessing_sequence_old x [] H': x β witnessed_elements_old_of_max_len (length [])
x β eval Ο patt_ind_gen
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M wit: list M Hl: wit = [] Hwit: is_witnessing_sequence_old x [] H': x β witnessed_elements_old_of_max_len (length [])
x β eval Ο patt_ind_gen
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M wit: list M Hl: wit = [] H: last [] = Some x H0: False H': x β witnessed_elements_old_of_max_len (length [])
x β eval Ο patt_ind_gen
contradiction.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M wit: list M y: M l': list M Hl: wit = y :: l' Hwit: is_witnessing_sequence_old x (y :: l') H': x
β witnessed_elements_old_of_max_len
(length (y :: l'))
x β eval Ο patt_ind_gen
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M wit: list M y: M l': list M Hl: wit = y :: l' Hwit: is_witnessing_sequence_old x (y :: l') H': x
β witnessed_elements_old_of_max_len
(length (y :: l'))
x β witnessed_elements_old_of_max_len (S ?len)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M x: M wit: list M y: M l': list M Hl: wit = y :: l' Hwit: is_witnessing_sequence_old x (y :: l') H': x
β witnessed_elements_old_of_max_len
(S (length l'))
x β witnessed_elements_old_of_max_len (S ?len)
apply H'.Qed.Definitionwitnessed_elements : propset (Domain M) :=
PropSet (Ξ»m, βl, is_witnessing_sequence m l).
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M
witnessed_elements_old = witnessed_elements
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M
witnessed_elements_old = witnessed_elements
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M
(βx : M,
x β witnessed_elements_old β x β witnessed_elements)
β§ (βx : M,
x β witnessed_elements
β x β witnessed_elements_old)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M H: is_witnessing_sequence_old m l
m β {[ m | βl : list M, is_witnessing_sequence m l ]}
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M H: is_witnessing_sequence m l
m
β {[ m | βl : list M, is_witnessing_sequence_old m l ]}
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M H: is_witnessing_sequence_old m l
m β {[ m | βl : list M, is_witnessing_sequence m l ]}
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M H: is_witnessing_sequence_old m l
is_witnessing_sequence m (reverse l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M H: is_witnessing_sequence_old m l
is_witnessing_sequence_old m (reverse (reverse l))
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M H: is_witnessing_sequence_old m l
is_witnessing_sequence_old m l
exact H.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M H: is_witnessing_sequence m l
m
β {[ m | βl : list M, is_witnessing_sequence_old m l ]}
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M H: is_witnessing_sequence m l
is_witnessing_sequence_old m (reverse l)
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M m: M l: list M H: is_witnessing_sequence m l
is_witnessing_sequence m l
apply H.Qed.
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M
eval Ο patt_ind_gen = witnessed_elements
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M
eval Ο patt_ind_gen = witnessed_elements
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M
eval Ο patt_ind_gen = witnessed_elements_old
Ξ£: Signature base, step: Pattern patt_ind_gen_body:= nest_mu base
or nest_mu step $ BoundVarSugar.B0: Pattern patt_ind_gen_simple_body:= base
or step $
patt_free_svar
(fresh_svar
patt_ind_gen_body): Pattern Hwfpbase: well_formed_positive base Hwfpstep: well_formed_positive step M: Model Ο: Valuation F:= letX := fresh_svar patt_ind_gen_body in
Fassoc Ο patt_ind_gen_body^{svar:0β¦X} X: propset M β propset M